SQL Server échappe un trait de soulignement


339

Comment puis-je échapper au caractère de soulignement?

J'écris quelque chose comme la clause where suivante et je veux pouvoir trouver des entrées réelles avec _d à la fin.

Where Username Like '%_d'

Réponses:


525

Référence T-SQL pour LIKE :

Vous pouvez utiliser le caractère générique correspondant aux caractères correspondants en tant que caractères littéraux. Pour utiliser un caractère générique comme caractère littéral, mettez le caractère générique entre crochets. Le tableau suivant montre plusieurs exemples d'utilisation du mot clé LIKE et des caractères génériques [].

Pour votre cas:

... LIKE '%[_]d'

oh mec! ... si cela ne fonctionne toujours pas, assurez-vous que la colonne est à droite.
Jens Frandsen

198

Évidemment, la solution @Lasse a raison, mais il existe une autre façon de résoudre votre problème: l'opérateur T-SQL LIKEdéfinit la clause ESCAPE facultative , qui vous permet de déclarer un caractère qui échappera au caractère suivant dans le modèle.

Pour votre cas, les clauses WHERE suivantes sont équivalentes:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

43
Pour compléter l'image: la ESCAPEclause fait partie de la norme SQL et fonctionnera sur n'importe quel SGBD, pas seulement sur SQL Server.
a_horse_with_no_name

2

Ces solutions ont tout à fait du sens. Malheureusement, aucun n'a fonctionné pour moi comme prévu. Au lieu d'essayer de m'embêter avec ça, je suis allé avec un travail autour:

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


0

Aucun de ceux-ci n'a fonctionné pour moi dans SSIS v18.0, donc je ferais quelque chose comme ceci:

WHERE CHARINDEX('_', thingyoursearching) < 1

.. où j'essaie d'ignorer les chaînes avec un soulignement en eux. Si vous voulez trouver des choses qui ont un trait de soulignement, il suffit de le retourner:

WHERE CHARINDEX('_', thingyoursearching) > 0

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.