Selection ganzer Worte per regexp Suche

From: Andreas Tille <andreas(at)an3as(dot)eu>
To: pgsql-de-allgemein(at)postgresql(dot)org
Subject: Selection ganzer Worte per regexp Suche
Date: 2013-07-11 15:07:08
Message-ID: 20130711150708.GL28723@an3as.eu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

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.

Viele Grüße

Andreas.

--
http://fam-tille.de

Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message Lars Grundei 2013-07-11 15:14:47 Re: Selection ganzer Worte per regexp Suche
Previous Message Michael Banck 2013-06-24 18:57:49 Re: Wiederherstellen nicht möglich