Foire aux questions sur les requêtes SQL sans tenir compte de la casse SELECT
: Comment émettre des requêtes SQL SELECT
en ignorant la casse (en ignorant si une chaîne de caractères est en majuscule ou en minuscule) ?
Contexte
Lorsque j’ai commencé à écrire des requêtes SQL, j’utilisais Postgresql, et j’ai utilisé certaines de leurs capacités d’expression régulière personnalisées pour effectuer des requêtes insensibles à la casse. Cela semblait être une bonne idée à l’époque, mais lorsque j’ai essayé de déplacer mon application vers une base de données MySQL, une partie de mon application ne fonctionnait plus. Après un peu de débogage, je me suis souvenu que j’avais utilisé des capacités de requête spécifiques à Postgreql, et j’ai donc dû réécrire cette partie du code pour qu’elle fonctionne avec MySQL.
Pour vous épargner une partie de cette peine, les exemples suivants montrent comment écrire des requêtes SQL SELECT insensibles à la casse en utilisant la syntaxe standard SQL. Les requêtes présentées devraient fonctionner avec la plupart, sinon toutes, les bases de données conformes à SQL 92.
Une mise en garde très importante
Veuillez noter qu’il y a une chose TRÈS IMPORTANTE à dire sur l’approche présentée :
Ces requêtes forcent votre base de données à effectuer un balayage de table. Cela signifie que si vous avez un index sur la colonne que vous recherchez, cet index ne sera pas utilisé. Donc, si vous avez un milliard d’enregistrements dans votre table, cette approche forcera la base de données à regarder tous les un milliard d’enregistrements. De toute évidence, il s’agit d’une mise en garde très importante dont vous devez être conscient.
Je ne publie pas les commentaires des personnes qui utilisent un langage désobligeant, mais comme l’a écrit une personne dans les commentaires (entre les insultes), « l’utilisation d’une fonction pour convertir une colonne entière de données nécessite un balayage de la table et devrait être évitée dans une
WHERE
clause. »
Sélection SQL insensible à la casse : Utiliser les fonctions supérieures ou inférieures
La façon standard SQL d’effectuer des requêtes insensibles à la casse est d’utiliser les fonctions SQL upper
ou lower
, comme ceci :
select * from users where upper(first_name) = 'FRED';
ou ceci :
select * from users where lower(first_name) = 'fred';
Comme vous pouvez le voir, le schéma consiste à mettre le champ que vous recherchez en majuscules ou en minuscules, puis à faire en sorte que votre chaîne de recherche soit également en majuscules ou en minuscules pour correspondre à la fonction SQL que vous avez utilisée. Cela fonctionne avec toutes les bases de données SQL que j’ai utilisées, y compris Postgresql, MySQL et SQL Server.
SQL LIKE queries
Vous pouvez utiliser la même technique pour rendre vos requêtes SQL LIKE
insensibles à la casse également. Voici comment utiliser la fonction majuscule avec une requête SQL LIKE
:
select * from users where upper(first_name) like '%AL%';
et voici la même requête SQL LIKE
insensible à la casse en utilisant la fonction SQL lowercase
:
select * from users where lower(first_name) like '%al%';
Résumé
J’espère que ces exemples de requêtes SELECT SQL insensibles à la casse vous seront utiles. Encore une fois, l’astuce consiste à convertir ce que vous recherchez en majuscules ou en minuscules à l’aide des fonctions SQL upper et lower, puis à faire en sorte que votre chaîne de recherche corresponde à cette casse.