vendredi 8 juin 2012

Recherche pour les lignes avec des caractères spéciaux dans SQL Server

Alors que le dépannage d'un problème de programmation d'aujourd'hui, j'ai remarqué que vous ne pouvez pas utiliser une recherche LIKE pour les colonnes de chaîne de caractères contenant des caractères spéciaux comme% ou _ sans utiliser une syntaxe particulière. Déterminer le problème a pris seulement quelques minutes, mais la syntaxe souvenir est toujours plus facile si vous écrivez à ce sujet.

Alors oui, ce poste est le seul à mon avantage. Espérons que cela aidera quelqu'un d'autre aussi.

Disons que vous voulez trouver tous les champs qui contiennent le texte "100%", alors vous mettre ensemble cette requête:

SELECT * FROM nom_table WHERE fieldname LIKE '% 100%%'

Au lieu de ce que vous vouliez, vous aurez toutes les lignes qui contiennent "100''ainsi que les lignes qui contiennent" 100% ".

Le problème ici est que SQL Server utilise le signe pour cent, de soulignement, et les crochets comme des caractères spéciaux. Vous ne pouvez pas les utiliser comme un personnage ordinaire dans une requête LIKE sans les échapper.

Evasion Crochet

Vous pouvez entourer l'% ou _ avec des crochets pour raconter SQL Server que le personnage est à l'intérieur un caractère régulier.

SELECT * FROM nom_table WHERE fieldname LIKE '% 100 [%]%'

Syntaxe d'échappement T-SQL

Alternativement, vous pouvez ajouter l'opérateur ESCAPE sur votre requête, et ajouter un caractère avant la valeur que vous voulez échapper.

SELECT * FROM nom_table WHERE fieldname LIKE '% 100%% ' escape ''

L'ESCAPE '' une partie de la requête indique au moteur SQL pour interpréter le personnage après le comme un caractère littéral plutôt que comme un joker.

Personnellement, je trouve la seconde méthode plus facile à traiter, et vous pouvez l'utiliser pour échapper à un crochet ainsi.

Aucun commentaire:

Enregistrer un commentaire