我有一个单词列表a
b
和c
在我的数据库中,文本列包含许多以空格分隔的单词。
我想列出包含我所期望的其他单词的所有记录。
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中都这样做了吗?
修改
感谢Dwayne Towell,我提出了这个问题。
SELECT * FROM a
WHERE NOt(ARRAY['a','b','c'] @> regexp_split_to_array(memo, E'\\s+')::text[]);
答案 0 :(得分:2)
您可以将字符串分成行并使用IN
,就像这样。
SELECT * FROM (
SELECT id,regexp_split_to_table(memo, E'\\s+') AS word FROM a
) x
WHERE word NOT in ('a','b','c');
请参阅fiddle。