Ich versuche, Elemente mit einer gespeicherten Prozedur mit like zu filtern. Die Spalte ist ein Varchar (15). Die Elemente, die ich filtern möchte, haben eckige Klammern im Namen.
Zum Beispiel : WC[R]S123456
.
Wenn ich ein mache LIKE 'WC[R]S123456'
, wird es nichts zurückgeben.
Ich habe einige Informationen zur Verwendung des ESCAPE
Schlüsselworts mit gefunden, LIKE
aber ich verstehe nicht, wie ich damit die eckigen Klammern als reguläre Zeichenfolge behandeln soll.
LIKE '[fz]oo'
sowohl "foo" als auch "zoo".LIKE 'WC\[R]S123456' ESCAPE '\'
da es für die Wartung besser lesbar ist.Angenommen, Sie möchten mit dem Literal übereinstimmen
its[brac]et
.Sie müssen dem nicht entkommen,
]
da es nur dann eine besondere Bedeutung hat, wenn es mit gepaart ist[
.Daher
[
reicht es aus, zu entkommen , um das Problem zu lösen. Sie können entkommen,[
indem Sie es durch ersetzen[[]
.quelle
[[]
sieht zwar komisch aus, ist aber sinnvoll, wenn man es aus der Perspektive des Parsers betrachtet. Der Parser hat eine spezielle Regel für den Umgang mit Zeichen zwischen[ ]
. Der Textits[brac]et
bedeutet also: "Suchen Sie die folgenden aufeinander folgenden Zeichenfolgen :its
, (Regel für eckige Klammern anwenden :)brac
,et
" . Auf der anderen Seiteits[[]brac]et
bedeutet: "Finden Sie die folgenden aufeinander folgenden Zeichenfolgen :its
, (Regel für eckige Klammern anwenden :)[
,brac]et
" .Ich musste Namen, die mit einem Unterstrich begannen, von einer Abfrage ausschließen, daher kam ich zu folgendem Ergebnis:
quelle
Folgendes habe ich tatsächlich verwendet:
quelle
Das Schlüsselwort ESCAPE wird verwendet, wenn Sie nach Sonderzeichen wie% und _ suchen müssen, die normalerweise Platzhalter sind. Wenn Sie ESCAPE angeben, sucht SQL buchstäblich nach den Zeichen% und _.
Hier ist ein guter Artikel mit einigen weiteren Beispielen
quelle
Wenn Sie Sonderzeichen wie '_' (Unterstrich) wie in meinem Fall umgehen müssen und keine ESCAPE-Klausel definieren möchten / können, möchten Sie das Sonderzeichen möglicherweise in eckige Klammern setzen '[ ' und '] ' .
Dies erklärt die Bedeutung der "seltsamen" Zeichenfolge "[[]" - sie umfasst nur das Zeichen "[" mit eckigen Klammern und entgeht ihm effektiv.
Mein Anwendungsfall bestand darin, den Namen einer gespeicherten Prozedur mit Unterstrichen als Filterkriterium für den Profiler anzugeben. Also habe ich den String '% name [_] von [_] einer [_] gespeicherten [_] Prozedur%' eingefügt. in ein TextData LIKE-Feld eingefügt und sie hat mir Trace-Ergebnisse geliefert, die ich erreichen wollte.
Hier ist ein gutes Beispiel aus der Dokumentation: LIKE (Transact-SQL) - Verwenden von Platzhalterzeichen als Literale
quelle
Laut Dokumentation :
Sie müssen diesen drei Zeichen entkommen
%_[
:quelle
Anstelle von '\' oder einem anderen Zeichen auf der Tastatur können Sie auch Sonderzeichen verwenden, die nicht auf der Tastatur vorhanden sind. Abhängig von Ihrem Anwendungsfall kann dies erforderlich sein, wenn Sie nicht möchten, dass Benutzereingaben versehentlich als Escape-Zeichen verwendet werden.
quelle
¬
- es ist immer noch eine Tastaturfigur in Großbritannien, wird aber selten wissentlich verwendet :) (oben links zwischenEsc
undTab
)Verwenden Sie Folgendes.
Verwenden Sie die Escape-Taste, damit Benutzereingaben unverändert suchen können, da alle Sonderzeichen nachfolgend ersetzt werden müssen (siehe unten den gesamten SQL Server).
Hier wird ein einfaches Anführungszeichen "'" nicht verwendet, da es die like-Klausel nicht beeinflusst, da es sich um eine Verkettung von Zeichenfolgen handelt.
"-" & "^" & "]" Ersetzen ist nicht erforderlich, da wir "[" entkommen.
In SQL Query sollte es dann wie folgt aussehen. (In der parametrisierten Abfrage kann eine Zeichenfolge nach dem obigen Ersetzen mit Mustern hinzugefügt werden.)
Um die genaue Zeichenfolge zu suchen.
Um zu suchen, beginnen Sie mit einer Zeichenfolge
Suche Ende mit String
Zu suchen enthalten mit Zeichenfolge
und so weiter für andere Mustervergleiche. Direkte Benutzereingaben müssen jedoch wie oben erwähnt formatiert werden.
quelle
Darin liegt ein Problem:
und:
Beide funktionieren für SQL Server, aber nicht für Oracle.
Es scheint, dass es keine ISO / IEC 9075-Methode gibt, um ein Muster mit einer linken Klammer zu erkennen.
quelle