Lorsque nous avons besoin de
rechercher des données selon un certain patron, l'opérateur LIKE
nous est bien utile. Même si elles ne sont pas aussi riches que les
expressions régulières, avec SQL Server, nous pouvons utiliser des
expressions pour définir les patrons de recherche. Les caractères
de recherche les plus connus sont les suivants:
- CaractèresDéfinition
% Match un ou plusieurs caractères _ Match un caractère [...] Match un caractère parmis la liste spécifiée [^...] Match un caractère qui n'est pas parmi la liste spécifié
Par exemple, si on prendre la table
DatabaseLog de la base de données AdventureWorks, si on veut
rechercher l'ensemble des requêtes SQL qui ont modifiées la table
Address, on exécutera la requête suivante :
Comme on voit, la requête n'est pas
efficace puisqu'elle retourne pas seulement les enregistrements qui
touche la table "Address", mais l'ensemble des requêtes
qui contiennent le mot "Address", comme par exemple
"AddressType", "BusinessEntityAddress" ou même
"EmailAddress". Pour corriger le tir, on peut tenter de
décorer le mot "Adresse" de crochet:
Le résultat est pire, nous obtenons
des enregistrements qui ne contiennent pas du tout le mot "Address"
puisque les caractères "[" et "]" ont une
signification spéciale. SQL Server va tenter de matcher un des
caractères de "Address" dans l'ensemble des données.
Pour avoir le bon résultat, il faudra
utiliser une clause qui est un peu plus méconnu, soit la clause
"ESCAPE". Cette clause permet de définir un caractère
d'échappement qui va nous permettre de recherche le bon patron. Pour
notre exemple, nous allons utiliser le caractère "!" comme
caractère d'échapement, mais n'importe quel caractère peut faire
l'affaire.
De la même façon, on peut aussi
rechercher dans la table DatabaseLog les requêtes SQL qui ont
utilisées le caractère "%".
Maintenant que nous connaissons la
clause ESCAPE, à quoi peut-elle vraiment nous servir et quand on
doit s'en servir?
Il n'est pas rare qu'une application,
web ou non, offre à l'utilisateur la possibilité de faire une
recherche dans les données. Avec la clause ESCAPE, nous pouvons
offrir la possibilité à l'utilisateur de faire des recherches dans
les données, sans interférer avec les caractères spéciaux. Pour
ce faire, il suffit de préfixer les caractères spéciaux présent
dans la chaînes de recherche avec un caractère d'échappement.
Afin de limiter les efforts relié à
l'écriture, on peut aussi se créer une procédure qui nous
permettra de rechercher un patron dans un champ en particulier. Ce
qui a de spécial, dans ce cas-ci, c'est qu'il ne faut pas oublier de
doubler les apostrophes étant donné qu'on se sert de SQL dynamique.
Aucun commentaire:
Publier un commentaire