Re: Selection ganzer Worte per regexp Suche
Lars Grundei <[email protected]>
| Newsgroups | gmane.comp.db.postgresql.german |
|---|---|
| Message-ID | <0EAF4A34C2A33B4FB958F0A6150072AC4B3DD8C1DA@mcsrv03.meteocontrol.intra> |
> -----Ursprüngliche Nachricht----- > Von: [email protected] [mailto:pgsql-de-allgemein- > [email protected]] Im Auftrag von Andreas Tille > Gesendet: Donnerstag, 11. Juli 2013 17:07 > An: [email protected] > Betreff: [pgsql-de-allgemein] Selection ganzer Worte per regexp Suche > > Hallo, > > ich möchte aus folgender Tabelle > > CREATE table test ( > row int, > data text > ) ; > > INSERT INTO test VALUES ( 1, 'abc' ); > INSERT INTO test VALUES ( 2, 'abc, xyz' ); INSERT INTO test VALUES ( 3, 'uvw, > abc, xyz' ); INSERT INTO test VALUES ( 4, 'xabc' ); INSERT INTO test VALUES ( > 5, 'yabcz' ); > > alls die Zeilen heraussuchen, in denen das ganze Wort 'abc' vorkommt aber eben > nicht sowas wie 'xabc'. Mit anderen Worten, die Abfrage soll nur die Zeilen > 1, 2 und 3 enthalten, das heißt > > SELECT * FROM test WHERE data like '%abc%' ; > > liefert zu viel. Ich habe also mit regexp experimentiert und dachte sowas wie > > SELECT * FROM test WHERE data ~ '\babc\b' ; > > wäre eine gute Idee - das liefert aber keine Zeile. Selbst > > SELECT * FROM test WHERE data ~ '.*\babc\b.*' ; > > liefert nichts - scheinbar ist '\b' (Wortgrenze) nicht implementiert. > Wie kann man die betreffenden Zeilen geschickt herausfiltern? > > Bemerkung: In meiner Anwendung werden die Worte immer durch ', ' > getrennt, wenn es mehrere sein sollten. Eventuell kann man die also in ein > Array aufsplitten und dann im Array nach ganzen Wörtern suchen. > Da ich denke, daß sowas länger dauert, würde ich die regexp Methode > bevorzugen. > Ohne es jetzt genau probiert zu haben, aber diese Regex sollte genau das tun '((\s|,)abc(\s+|,|$)|^abc$)'.
smime.p7s
(application/x-pkcs7-signature, 6.1 KB) - not displayed