SQL Server: Come fare ricerche CASE SENSITIVE

Carissimi lettori, ben torrnati!


L'articolo di ieri è stato sicuramente intenso (Database corrotti, recupero tramite DBCC WRITEPAGES) per cui oggi sarò molto più breve. Promesso!

Vi farò vedere come eseguire una ricerca case sentitive anche se la collate impostata sul database non lo è.


Ricerche case sensitive

Supponiamo di aver impostato sul nostro database una collate che non è case sensitive. Ovvero non è sensibile alle maiuscole e minuscole.

Supponiamo ora di avere una tabella "elenco" dentro la quale sono memorizzati una serie di nomi, come questa sotto:


SQL SSMS Query result

Ora, il nostro database non è case sensitive per cui una interrogazione come questa:


SELECT * FROM ELENCO WHERE CODICE = 'LUCA'

ritornerà sempre entrambi i record.

Ma se volessimo restituito solamente il codice dove LUCA è scritto solo in minuscolo?
Come fare?


Bhe, il trucco è semplice.

Avete presente quando abbiamo parlato nei giorni scorsi di COLLATE?  (fai click qui:Errore Messaggio 468: Non è possibile risolvere il conflitto tra le regole di confronto "AAAA" e "BBBB" nell'operazione equal to. )

Avevamo accennato al fatto che è la COLLATE a stabilire se la nostra colonna è CASE SENSITIVE oppure no.

Ecco il trucco è proprio questo:  

Nella WHERE che andremo a scrivere andremo a specificare una COLLATE che sia CASE SENSITIVE.

Scriviamo ad esempio:


SELECT * FROM ELENCO WHERE CODICE COLLATE SQL_Latin1_General_CP1_CS_AS = 'luca'


Eseguitela ed ecco il risultato..


 

 

 

Per oggi è tutto, ci vediamo presto..
P.S. Buon ferragosto!


Luca Biondi @ SQLServerPerformance blog!

 
 
 
 
 
 
 
 
 

Comments

I Post più popolari

SQL Server, execution plan and the lazy spool (clearly explained)

SQL Server, datetime vs. datetime2

La clausola NOLOCK. Approfondiamo e facciamo chiarezza!