SQL:查找包含意外单词的字符串

时间:2014-09-03 04:22:50

标签: sql postgresql postgresql-9.2

我有一个单词列表a bc 在我的数据库中,文本列包含许多以空格分隔的单词。

我想列出包含我所期望的其他单词的所有记录。

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[]);

1 个答案:

答案 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