2016-06-14 10 views
2

Ich habe eine Tabelle, die eine Textspalte enthält, sagen Fahrzeugnummer.PostgreSQL-Abfrage in einer Textspalte ignoriert Sonderzeichen

Jetzt möchte ich die Tabelle nach Feldern abfragen, die eine bestimmte Fahrzeugnummer enthalten.

Während des Abgleichs möchte ich keine nicht-alphanumerischen Zeichen berücksichtigen.

example: query condition - DEL123 
     should match - DEL-123, DEL/123, [email protected], etc... 
+0

Verwendung von regulären Ausdrücken –

+0

Was genau meinen Sie mit „Sonderzeichen“? – melpomene

+0

@melpomene durch Sonderzeichen Ich meinte Zeichen, die nicht alphanumerisch sind –

Antwort

3

Wenn Sie wissen, welche Zeichen zu überspringen, setzen Sie sie als zweiten Parameter dieses translate() Anruf (die schneller als regexp Funktionen ist):

select * 
from a_table 
where translate(code, '-/@', '') = 'DEL123'; 

Else, können Sie nur alphanumerische Zeichen vergleichen mit regexp_replace():

select * 
from a_table 
where regexp_replace(code, '[^[:alnum:]]', '', 'g') = 'DEL123'; 
+0

@kiln Thanks. Es war hilfreich. –

+0

@SantoshGupta Geist außer dieser als Antwort? Aber ich denke, das könnte mehr Werte akzeptieren, als du wirklich willst. – maxik

+0

@maxik - zum Beispiel? – klin

0

@ klin Antwort ist groß, aber nicht sargable, so in Fällen, in denen Sie durch Millionen von Datensatz sind (m aybe nicht Ihr Fall, aber möglicherweise jemand anderes mit einer ähnlichen Frage, die nach Antworten sucht), die regulären Ausdrücke verwendend, werden wahrscheinlich viel bessere Resultate erbringen.

Im Folgenden werden Indizes für Code verwenden, signifikant die Anzahl der Zeilen getestet reduzieren:

select * 
from a_table 
where code ~ '^DEL[^[:alnum:]]*123$'; 
Verwandte Themen