2
我有一個字詞列表a
b
和c
。
在我的數據庫中,文本列中包含許多由空格分隔的單詞。SQL:查找包含意外字詞的字符串
我想列出包含其他單詞的所有記錄,我期望。
create table a (id int, memo text);
insert into a values
(1, 'a aa b'),
(2, 'b a'),
(3, 'c a d'),
(4, 'b cc a');
select * from a where memo /*matches something else than 'a', 'b', 'c'*/ ~ '[^abc ]';
/* should return 1 because of aa */
/* 3 because of d */
/* 4 because of cc */
查看SQLFiddle。
我目前的查詢只返回3,這不是我正在尋找的。 無論如何在postgresql中做到這一點?
編輯
感謝德韋恩Towell,我想出了這個查詢。
SELECT * FROM a
WHERE NOt(ARRAY['a','b','c'] @> regexp_split_to_array(memo, E'\\s+')::text[]);
謝謝!我發現使用regexp_split_to_array沒有子查詢會更快。 – oldergod 2014-09-03 06:15:39