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