2010-09-07 6 views
41

Verwenden von SQL Server 2008. Ich habe eine Tabelle mit der folgenden Spalte:SQL Server LIKE enthalten Klammerzeichen

sampleData (nvarchar(max)) 

Der Wert für diese Spalte in einigen dieser Zeilen formatierte Listen wie folgt:

["value1","value2","value3"] 

Ich versuche, eine einfache Abfrage zu schreiben, die alle Zeilen mit so formatierten Listen zurückgibt, indem nur die öffnende Klammer erkannt wird.

SELECT * from sampleTable where sampleData like '[%' 

Die obige Abfrage, weil nicht funktioniert ‚[‘ ein Sonderzeichen ist, und ich kann für das Leben von mir nicht vorstellen, wie die Halterung zu entkommen, so meine Frage tut, was ich will.

Vielen Dank für Anregungen!

Antwort

57
... like '[[]%' 

Sie verwenden [ ] ein Sonderzeichen (oder Bereich) zu umgeben

finden Sie im Abschnitt "Verwenden von Wildcard-Zeichen als Literale" in SQL Server LIKE

bearbeiten, 24. November 2011

Hinweis: Sie müssen die schließende Klammer nicht verlassen ...

23

Abgesehen von der Antwort von gbn, ist die andere Methode, diezu benutzenOption:

SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\' 

Siehe documentation für Details

2

Nur eine weitere Notiz hier ... Wenn Sie die Konsole (oder andere Angebote) innerhalb eines Satzes von Zeichen aufnehmen möchten, müssen Sie nur die Möglichkeit der Verwendung von ESCAPE (da Sie bereits die Klammern verwenden, um den Satz anzugeben). Sie müssen auch die ESCAPE-Klausel angeben, da es kein Standard-Escape-Zeichen gibt (es ist standardmäßig kein Backslash, wie ich zuerst dachte, wenn er von einem C-Hintergrund kommt).

z.B. wenn ich herausziehen Reihen will, wo eine Spalte etwas außerhalb eines Satzes von ‚akzeptabel‘ Zeichen enthält, für die Zwecke des Beweises sich alphanumerics sagen ... wir mit diesem

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%' 

So sind wir Rückkehr etwas anfangen könnten das hat irgendein Zeichen, das nicht in der Liste ist (wegen des führenden caret^Charakters).

Wenn wir wollen, dann Sonderzeichen in diesem Satz akzeptabler Zeichen hinzufügen möchten, wir die Klammern nicht verschachtelt werden können, so müssen wir ein Escape-Zeichen wie folgt verwenden ...

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\' 

die Klammern Vorstehende (einzeln) Mit einem umgekehrten Schrägstrich und der Angabe, dass wir Backslash für das Escape-Zeichen verwenden, können wir ihnen innerhalb der funktionierenden Klammern entkommen, die den Satz von Zeichen anzeigen.

Sorry für die dumme Beispiel, aber hoffen, dass es jemand hilft

+0

So sind wir kein Glück, wenn wir PATINDEX verwenden? – Sam