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'
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:
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'
Évidemment, la solution @Lasse a raison, mais il existe une autre façon de résoudre votre problème: l'opérateur T-SQL LIKE
dé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 '^';
ESCAPE
clause fait partie de la norme SQL et fonctionnera sur n'importe quel SGBD, pas seulement sur SQL Server.
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
Cela a fonctionné pour moi, utilisez simplement l'évasion
'%\_%'
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