SQL Server Escape ein Unterstrich

337

Wie entkomme ich dem Unterstrich?

Ich schreibe so etwas wie die folgende where-Klausel und möchte in der Lage sein, tatsächliche Einträge mit _d am Ende zu finden.

Where Username Like '%_d'
GateKiller
quelle

Antworten:

522

T-SQL-Referenz für LIKE :

Sie können die mit dem Platzhaltermuster übereinstimmenden Zeichen als Literalzeichen verwenden. Um ein Platzhalterzeichen als Literalzeichen zu verwenden, setzen Sie das Platzhalterzeichen in Klammern. Die folgende Tabelle zeigt einige Beispiele für die Verwendung des Schlüsselworts LIKE und der Platzhalterzeichen [].

Für Ihren Fall:

... LIKE '%[_]d'
Lasse V. Karlsen
quelle
Oh Mann! ... wenn es immer noch nicht funktioniert, stellen Sie sicher, dass Sie die richtige Spalte haben.
Jens Frandsen
198

Natürlich ist die @ Klasse-Lösung richtig, aber es gibt noch eine andere Möglichkeit, Ihr Problem zu lösen: Der T-SQL-Operator LIKEdefiniert die optionale ESCAPE- Klausel, mit der Sie ein Zeichen deklarieren können, das dem nächsten Zeichen im Muster entgeht.

Für Ihren Fall sind die folgenden WHERE-Klauseln gleichwertig:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
Gerardo Lima
quelle
42
Um das Bild zu vervollständigen: Die ESCAPEKlausel ist Teil des SQL-Standards und funktioniert auf jedem DBMS, nicht nur auf SQL Server.
a_horse_with_no_name
2

Diese Lösungen sind absolut sinnvoll. Leider hat keiner für mich wie erwartet funktioniert. Anstatt zu versuchen, mich damit zu beschäftigen, ging ich mit einer Arbeit herum:

select * from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name
Tek Mailer
quelle
2

Das hat bei mir funktioniert, benutze einfach die Flucht '%\_%'

Arnór Barkarson
quelle
0

Keines davon hat in SSIS v18.0 für mich funktioniert, daher würde ich so etwas tun:

WHERE CHARINDEX('_', thingyoursearching) < 1

..wobei ich versuche, Zeichenfolgen mit einem Unterstrich zu ignorieren. Wenn Sie Dinge finden möchten, die einen Unterstrich haben, drehen Sie ihn einfach um:

WHERE CHARINDEX('_', thingyoursearching) > 0

Vielfraß87
quelle