UPPER e LOWER nel linguaggio SQL
Utilizzando l'interrogazione SELECT del linguaggio Sql si può incorrere in problemi se la tabella è case sensitive e non si specificano correttamente le lettere minuscole e le maiuscole del dato che stiamo cercando.
Un esempio di ricerca case sensitive
Ad esempio, prendiamo in considerazione un database case sensitive con due clienti, uno con cognome "Rossi" e l'altro con tutte le lettere minuscole "rossi". Il cognome è lo stesso ma il dato è differente.
Scrivendo la seguente query:
SELECT cliente
FROM fatturazione
WHERE cliente = 'Rossi';
Quest'ultima visualizza soltanto il cliente con cognome uguale a "Rossi" escludendo l'altro.
Per consentire la visualizzazione di entrambi i record ( "Rossi" e "rossi" ) si devono operare delle accortezze all'interno della selezione utilizzando le funzioni LOWER e UPPER.
Attenzione. In questo esempio sto usando un database case sensitive che considera differenti le lettere minuscole e maiuscole. Se il database fosse configurato case insensitive, la query estrapolerebbe entrambi i record ( "Rossi" e "rossi" ).
Come trasformare in maiuscolo o minuscolo un dato in Sql
Le funzioni Lower e Upper trasformano rispettivamente il dato in lettere minuscole o maiuscole. Proviamo a riscrivere la query precedente trasformando il campo cliente in lettere minuscole:
SELECT cliente
FROM fatturazione
WHERE LOWER(cliente) = 'rossi';
Nella query il dato è trasformato in lettere minuscole ( Lower ) e poi viene confrontato con la chiave di ricerca ( 'rossi' ).
In questo modo, la query seleziona entrambi i clienti, sia del cliente "Rossi" che del secondo cliente "rossi" precedentemente escluso.
La query ha trasformato dapprima il contenuto del dato cliente in lettere minuscole e successivamente lo ha confrontato con la chiave di ricerca 'rossi'.
Da notare, questa volta la chiave di ricerca è stata scritta in minuscolo per consentire il confronto.
Nota: La trasformazione in minuscolo non modifica il dato fisico contenuto nel database. In altri termini i due clienti continueranno a essere presenti nella tabella come "Rossi" e "rossi". La trasformazione agisce soltanto all'interno della query.
Si può ottenere lo stesso risultato utilizzando la funzione Upper.
In quest'ultimo caso, il dato relativo al cliente viene trasformato prima in lettere maiuscole e poi è confrontato con la chiave di ricerca.
SELECT cliente
FROM fatturazione
WHERE UPPER(cliente) = 'ROSSI';
E' importante notare che, in questo secondo caso, la chiave di ricerca è stata scritta completamente con lettere maiuscole. In caso contrario non potrebbe funzionare.
Domande e risposte
- Se viene convertito in minuscolo, non dovrebbe selezionare solamente "rossi" ed escludere "Rossi"? Se mi sono sbagliato io, potrebbe dirmi perché?
La funzione LOWER riduce in minuscolo tutti i dati nel campo Cliente. Pertanto, se in un record c'è il dato "Rossi" viene convertito in "rossi" dalla funzione. Per questa ragione sono selezionati entrambi, sia il dato "Rossi" che "rossi".