2017-11-04 4 views
0

Ich finde PostgreSQL ähnlich Operator funktioniert wenig seltsam. Ich habe versehentlich nach Leerzeichen in der Abfrage gesucht, aber überrascht mit dem Ergebnis.PostgreSQL ähnlich wie das Verhalten des Bedieners

select 'Device Reprocessing' similar to '%()%' --return true select 'Device Reprocessing' similar to '%()%' --return true select 'DeviceReprocessing' similar to '%()%' --return true

Warum 2. und die 3. Abfrage gibt wahr? Ist das leere Muster immer wahr?

Was ich über den Operator SIMILAR TO verstehe, gibt true oder false zurück, je nachdem, ob das Muster mit der angegebenen Zeichenfolge übereinstimmt.

+1

Es gibt keinen Punkt in 'ÄHNLICHEN TO' verwenden. Je. Ich verwende stattdessen "LIKE" oder reguläre Ausdrücke. https://stackoverflow.com/questions/12452395/difference-between-like-and-in-postgres/12459689#12459689 –

Antwort

2

Sie haben eine Gruppe mit nichts definiert, was bedeutet, dass alles übereinstimmt. Ich denke, Sie finden keine Zeichenfolge entspricht %()%, auch eine leere Zeichenfolge.

Normalerweise würden Sie diese Gruppierung verwenden Optionen zur Liste so:

select 'DeviceReprocessing' similar to '%(Davinci|Dog)%' 

false zurückgeben würde, da es enthält weder "Davinci" noch "Dog", aber dies:

select 'DeviceReprocessing' similar to '%(vice|Dog)%' 

würde return true da es mindestens eine der Optionen enthält.

Ihre erste Bedingung ist wahr, weil der Ausdruck ein Leerzeichen enthält.

ich eigentlich lieber die Regular Expression-Notation, die nicht die % Platzhalter benötigt:

select 'DeviceReprocessing' ~ 'vice|Dog' 
Verwandte Themen