J'ai une liste de mots a
b
et c
.
Dans ma base de données, il y a une colonne de texte contenant plusieurs mots séparés par un espace.SQL: trouver des chaînes qui contiennent des mots inattendus
Je voudrais lister tous les enregistrements qui contiennent d'autres mots que celui que je suis attendu.
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 */
Voir SQLFiddle.
Ma requête actuelle ne renvoie que 3, ce qui n'est pas ce que je recherche. Y a-t-il un moyen de le faire dans postgresql?
EDIT
Merci à Dwayne Towell, je suis venu avec cette requête.
SELECT * FROM a
WHERE NOt(ARRAY['a','b','c'] @> regexp_split_to_array(memo, E'\\s+')::text[]);
merci! J'ai trouvé que c'était plus rapide d'utiliser regexp_split_to_array sans sous-requêtes. – oldergod