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'

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'

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 '^';

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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.