有沒有更好的方法來做到這一點?看起來愚蠢的是有兩次相同的正則表達式,但我想指出哪個短語觸發了被選中的消息內容。服務器上的Greenplum 4.2.2.4(如PostgreSQL 8.2)。SELECT和WHERE中的冗餘正則表達式
SELECT
to_timestamp(extrainfo.startdate/1000)
,messages.timestamp
,users.username
,substring(messages.content from E'(?i)phrase number one|phrase\.two|another phrase|this list keeps going|lots\.of\*keyword phrases|more will be added in the future')
,messages.content
FROM users
LEFT JOIN messages ON messages.senderid = users.id
LEFT JOIN extrainfo ON extrainfo.username = users.username
WHERE extrainfo.type1 = 't'
AND messages.content ~* E'phrase number one|phrase\.two|another phrase|this list keeps going|lots\.of\*keyword phrases|more will be added in the future'
AND (extrainfo.type2 = 'f' OR extrainfo.type2 IS NULL)
難道真的PostgreSQL的8.2(古代版),或您使用的Greenplum或紅移? –
在x86_64-unknown-linux-gnu上編譯的GCC gcc(GCC)編譯的版本()返回:PostgreSQL 8.2.15(Greenplum數據庫4.2.2.4版本1社區版)4.4.2編譯於2012年10月17日11:52: 28 – Travis
如果您使用Greenplum,請不要說它是PostgreSQL。事實並非如此。它是Greenplum數據庫。它與真正的PostgreSQL有着非常不同的特性和功能。我爲你解決了你的問題。 –