Case insensitive SQL SELECT
query FAQ: Come posso emettere query SQL SELECT
ignorando il caso (ignorando se una stringa è maiuscola o minuscola)?
Sfondo
Quando ho iniziato a scrivere query SQL stavo usando Postgresql, e ho usato alcune delle loro capacità di espressione regolare personalizzate per eseguire query case-insensitive. All’epoca sembrava una buona idea, ma quando ho provato a spostare la mia applicazione su un database MySQL, una parte della mia applicazione non funzionava più. Dopo un po’ di debug mi sono ricordato che avevo usato le capacità di query specifiche di Postgreql, così ho dovuto riscrivere quella porzione di codice per lavorare con MySQL.
Per risparmiarvi un po’ di quel dolore, i seguenti esempi mostrano come scrivere query SELECT SQL sensibili alle maiuscole e alle minuscole usando la sintassi standard SQL. Le query mostrate dovrebbero funzionare con la maggior parte, se non con tutti i database conformi a SQL 92.
Un avvertimento molto importante
Si prega di notare che c’è una cosa MOLTO IMPORTANTE da dire sull’approccio mostrato:
Queste query forzano il vostro database ad eseguire una scansione della tabella. Questo significa che se avete un indice sulla colonna che state cercando, quell’indice non verrà utilizzato. Quindi se avete un miliardo di record nella vostra tabella, questo approccio costringerà il database a guardare tutti i miliardi di record. Ovviamente questo è un avvertimento molto importante di cui dovete essere consapevoli.
Non pubblico commenti di persone che usano un linguaggio dispregiativo, ma come ha scritto una persona nei commenti (tra gli insulti), “usare una funzione per convertire un’intera colonna di dati richiede una scansione della tabella e dovrebbe essere evitata in una clausola
WHERE
.”
SELECT SQL insensibile alle maiuscole e alle minuscole: Utilizzare le funzioni superiori o inferiori
Il modo standard SQL per eseguire query insensibili alle maiuscole e alle minuscole è quello di utilizzare le funzioni SQL upper
o lower
, come questo:
select * from users where upper(first_name) = 'FRED';
o questo:
select * from users where lower(first_name) = 'fred';
Come potete vedere, lo schema è quello di rendere il campo che state cercando in maiuscolo o minuscolo, e poi fare in modo che anche la vostra stringa di ricerca sia maiuscola o minuscola per corrispondere alla funzione SQL che avete usato. Questo funziona con tutti i database SQL che ho usato, inclusi Postgresql, MySQL e SQL Server.
QL LIKE queries
Puoi usare la stessa tecnica per rendere anche le tue LIKE
queries SQL insensibili alle maiuscole e alle minuscole. Ecco come si usa la funzione maiuscole con una query SQL LIKE
:
select * from users where upper(first_name) like '%AL%';
ed ecco la stessa query SQL LIKE
insensibile alle maiuscole utilizzando la funzione SQL lowercase
:
select * from users where lower(first_name) like '%al%';
Sommario
Spero che questi esempi di query SELECT SQL non sensibili alle maiuscole siano utili. Ancora una volta, il trucco è quello di convertire qualsiasi cosa stiate cercando in maiuscolo o minuscolo usando le funzioni SQL upper e lower, e poi far corrispondere la vostra stringa di ricerca a quel caso.