Re: Selection ganzer Worte per regexp Suche

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$)'.

In response to

Browse pgsql-de-allgemein by date

  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