Frage

läuft PostgreSQL \b?

Ich versuche \bAB\b aber es hat leider nichts gefunden, während (\W|^)AB(\W|$) tut. Diese zwei Ausdrücke sind im Wesentlichen die gleichen, nicht wahr?

War es hilfreich?

Lösung

PostgreSQL verwendet \m, \M, \y und \Y als Wortgrenzen:

\m   matches only at the beginning of a word
\M   matches only at the end of a word
\y   matches only at the beginning or end of a word
\Y   matches only at a point that is not the beginning or end of a word 

Siehe Regular Expression Constraint Escapes im Handbuch.

Es gibt auch [[:<:]] und [[:>:]], die den Anfang und das Ende eines Wortes entsprechen. Aus das Handbuch :

  

Es gibt zwei Sonderfälle der Klammerausdrücke: die Klammerausdrücke [[:<:]] und [[:>:]] sind Zwänge, leere Strings am Anfang und Ende eines Wortes passend ist. Ein Wort wird als eine Folge von Wort Zeichen definiert, die weder vorgeschaltet ist noch durch Wort-Zeichen. Ein Wort ist ein Zeichen alnum Zeichen oder ein Unterstrich (wie durch ctype definiert). Dies ist eine Erweiterung, kompatibel mit, aber keine Angabe von POSIX 1003.2 und soll in der Software mit Vorsicht verwendet werden sollte auf andere Systeme portierbar sein. Die Einschränkung entweicht unten beschrieben sind in der Regel bevorzugt, (sie sind nicht mehr Standard, sind aber sicherlich einfacher Typ).

Andere Tipps

Ein einfaches Beispiel

select * from table_name where column ~* '\yAB\y';

Dies wird AB entsprechen ab ab - text text ab text AB text-ab-text text AB text ...

Aber Sie müssen Verwendung:

select * from sometable where name ~* '\\yAB\\y';

, falls Sie standard_conforming_strings Flagge  auf OFF. Beachten Sie die doppelte Schrägstriche
Sie es manuell einstellen können.

set standard_conforming_strings=on;

Dann:. select * from table_name where column ~* '\yAB\y'; sollte funktionieren

Genaue Wortsuche in Text:

Ich habe folgendes Problem.

Ich wollte alle Kontakte suchen, die in Titel ‚cto‘ wie genau das Wort, aber in den Ergebnissen war Ergebnisse mit dem Titel immer darin, die ‚Direktor‘, ich wurde mit folgenden Abfrage

select * from contacts where title ilike '%cto%';

ich auch mit whitspaces um Wildcard versucht, als ‚% cto%‘, es wurde mit Text abgestimmt zu werden, die ‚cto‘ enthält, bekam Ergebnisse wie ‚vp, cto und Krippe‘, aber keine Ergebnisse mit dem genauen Titel als ‚cto‘ .

Ich wollte beide 'vp, cto und Krippe' und 'cto' in den Ergebnissen, aber nicht 'Direktor' in Ergebnissen

Im Anschluss arbeitet für mich

select * from contacts where title ~* '\\ycto\\y';

~   Matches regular expression, case sensitive
~*  Matches regular expression, case insensitive    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top