From: | Lars Grundei <l(dot)grundei(at)meteocontrol(dot)de> |
---|---|
To: | "pgsql-de-allgemein(at)postgresql(dot)org" <pgsql-de-allgemein(at)postgresql(dot)org> |
Subject: | Re: Selection ganzer Worte per regexp Suche |
Date: | 2013-07-11 15:14:47 |
Message-ID: | 0EAF4A34C2A33B4FB958F0A6150072AC4B3DD8C1DA@mcsrv03.meteocontrol.intra |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
> -----Ursprüngliche Nachricht-----
> Von: pgsql-de-allgemein-owner(at)postgresql(dot)org [mailto:pgsql-de-allgemein-
> owner(at)postgresql(dot)org] Im Auftrag von Andreas Tille
> Gesendet: Donnerstag, 11. Juli 2013 17:07
> An: pgsql-de-allgemein(at)postgresql(dot)org
> 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$)'.
From | Date | Subject | |
---|---|---|---|
Next Message | Boris Skegin | 2013-07-11 15:16:47 | Re: Selection ganzer Worte per regexp Suche |
Previous Message | Andreas Tille | 2013-07-11 15:07:08 | Selection ganzer Worte per regexp Suche |