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'
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:
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'
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 LIKE
definiert 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 '^';
ESCAPE
Klausel ist Teil des SQL-Standards und funktioniert auf jedem DBMS, nicht nur auf SQL Server.
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
Das hat bei mir funktioniert, benutze einfach die Flucht
'%\_%'
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