2017-10-27 21 views
-3

Newbie Frage. Ich suche nach Stichen mit dem Buchstaben 'R' Anfang dieses Werk:

SELECT * 
FROM table 
WHERE column LIKE 'R%' 

dies nicht

SELECT * 
FROM table 
WHERE column LIKE '^R%' 

WARUM? auch nur neugierig, wenn ich es will mit R beenden, verwende ich die $?

'%R$' 

Pattern Matching auch hier nicht erklärt. Wenn Sie andere Ressourcen für einen Laien kennen, teilen Sie diese bitte mit. danke https://www.postgresql.org/docs/9.3/static/functions-matching.html

+0

Meinst du die pg docs auf pattern matching sind nicht ausreichend? Was wird dir nicht "gut erklärt"? – 1252748

+2

Diese Dokumentation zeigt deutlich, dass 'LIKE' eine eigene Syntax hat, die sich von regex unterscheidet, die mit' SIMILAR TO' angewendet wird. Nirgends zeigt es an, dass Sie willkürlich mischen können und erwarten, dass es zu jeder Zeit weiß, welche Art von Mustererkennung Sie wünschen. –

+0

Platzhalter sind keine Regexe. –

Antwort

3

Das Handbuch ist sehr klar LIKE und reguläre Ausdrücke sind zu verschiedenen Dingen.

LIKE

Entsprechend zum Handbuch:

Der LIKE-Ausdruck gibt wahr, wenn die Zeichenfolge mit dem mitgelieferten Muster übereinstimmt. (Wie erwartet, gibt das NICHT LIKE Ausdruck falsche wenn LIKE true zurück, und umgekehrt. Ein äquivalenter Ausdruck nicht (string LIKE-Muster).)

So, wie gibt wahr oder falsch, während eine Zeichenfolge passende .

% ist vergleichbar mit * in filesearch, es bedeutet, dass es Null oder irgendwelche nach oder vor übereinstimmen wird.

  • R% R und ein beliebiges Zeichen nach.
  • %R Jedes Zeichen vor dem und R

LIKE es statt = verwendet, und mehr Funktionalitäten sind im Handbuch erläutert.

-- Gets zero or any characters before one R 
SELECT * FROM table WHERE column LIKE '%R' 

-- Gets zero or any characters after one R 
SELECT * FROM table WHERE column LIKE 'R%' 

REGULAR EXPRESION

In postgreSQL für einen regulären Ausdruck, statt = verwenden Sie verwenden ~ und das reguläre Ausdruck Format entsprechend die POSIX regular expressions Standards

Ein Beispiel ist:

-- Gets zero or any spaces numbers and text characters before one R 
SELECT * FROM table WHERE column ~ '^[\s\w]*[R]{1}$' 

-- Gets zero or any spaces numbers and text characters after one R 
SELECT * FROM table WHERE column ~ '^[R]{1}[\s\w]*$' 

In der Bedienungsanleitung Es gibt die Erklärung für alle verfügbaren Operatoren für reguläre Ausdrücke. Wie man reguläre Ausdrücke benutzt, ist eine andere Sache und es ist in den POSIX regular expressions Standards; Das hat nichts mit PostgreSQL zu tun.

+0

sehr hilfreiche Erklärung, danke. sieht so aus, als hätte ich versucht, die beiden austauschbar zu benutzen. – moonshot