2016-04-11 8 views
0

Ich versuche, solche Abfrage auszuführen:Mit ‚ilike‘ Zeilen auszuwählen, mit umgekehrten Schrägstrich [PostgreSQL]

select * from my_table where table_name ilike 'PDK\1100090' 

diese Abfrage 0 Zeilen zurückgibt, aber in der Tat, dass Tabelle enthält eine Zeile mit einem solchen String. Ich habe das überprüft, indem ich alles aus dieser Tabelle ausgewählt habe. Ich habe auch '=' anstelle von 'ilike' verwendet und habe versucht, die Saite mit E'PDK \ 1100090 ohne Glück zu spielen. Ich nehme an, es gibt ein Problem mit einem Backslash in der Zeichenfolge, aber ich könnte mich irren.

Vielen Dank im Voraus

+2

Soll es ein wörtlicher Backslash oder eine oktale Konstante 'e'PDK \ x480090'' sein? Für einen wörtlichen Backslash sollte 'e'PDK \\ 1100090'' den Trick machen. – joop

+0

Der Backslash hat eine besondere Bedeutung in den '[i] like' Anfragen: es ist die Standard-Escape-Zeichen (warum'% 'und' _' Meta-Zeichen kann damit entwertet werden?). '' Sie könnten 'col_name ilike 'PDK \ 1100090' Flucht verwenden' oder 'col_name ilike‚PDK \\ 1100090'' (vorausgesetzt, 'standard_conforming_strings' wird' on', die standardmäßig 'on' von 9.1+). – pozs

+0

@joop es soll ein wörtlicher Backslash sein Leider keiner Ihrer Vorschläge arbeitete Jungs, aber trotzdem vielen Dank für Ihre Antworten. – DanoPlurana

Antwort

0

Ersetzen Sie die Abfrage, indem Sie 3 weitere Backslashes hinzufügen, um das Problem zu lösen. Jetzt sieht es so aus:

select * from my_table where table_name ilike 'PDK\\\\1100090' 
+0

Dies wird höchstwahrscheinlich von einem "Frontend" (z. B. Shell-Skript) verursacht, das die erste Backslash-Quotierung durchführt; Dadurch wird die Zeichenfolge so reduziert, dass sie nur zwei umgekehrte Schrägstriche enthält. – joop

1

Sie behaupten, doppelte Backslashes versucht zu haben. Versuchen Sie folgendes:

where table_name ilike 'PDK_1100090' 

Gibt das etwas zurück? (Der Unterstrich sollte in dieser Position jedes Zeichen.)

versuchen dann für jede Folge:

where table_name ilike 'PDK%1100090' 

für ungewöhnliche Zeichen Dann sind am Anfang/Ende des Strings:

where table_name ilike '%PDK%1100090%' 

Wenn der doppelte Backslash nicht funktioniert, haben Sie eine andere Funkiness in der Zeichenfolge.

+0

Ok, danke Ersetzen von Backslash mit '_' funktioniert wie erwartet. Das Problem, das ich sehe, ist jetzt, dass es mehr Reihen als vorher zurückgeben kann. Ich fand auch heraus, dass das Hinzufügen von 3 mehr Schrägstriche, das Problem (‚PDK \\\\ 1100090‘) – DanoPlurana

+2

@DanoPlurana lösen, die nur bedeutet, dass Sie 'standard_conforming_strings' Einstellung ausgeschaltet. Entweder Sie verwenden eine Version vor Version 9.1 (die wirklich alt wird; Sie sollten ein Upgrade in Betracht ziehen), oder Sie verwenden das aus Gründen der Abwärtskompatibilität (aber in diesem Fall hätten Sie es in der Frage erwähnen sollen). – pozs

+0

Yup, ich benutze vor 9.1 Version. Obwohl Ihre Antwort das Problem nicht vollständig löst, lohnt es sich, diese zu korrigieren. Vielen Dank ! – DanoPlurana

Verwandte Themen