SQL Server - Estrarre valori distinti da una stringa

Scritto da  Antonio Giglio il domenica 3 aprile 2011  •  Linguaggio:    • 


Come facciamo a visualizzare i valori distinti di una colonna di tipo stringa ignorando i vincoli di case-insensity/accent-insensity che abbiamo settato all'atto di creazione del nostro database?

Per questo esempio utilizzeremo un resultset con una colonna "Valore" generato dalla query:

select 'caffè' as Valore
  union all select 'CafFe'
  union all select 'caffe'

 

Il nostro resultset è:

Figura1

Adesso effettuiamo la query per estrarre i valori distinti del nostro resultset:

select distinct Valore from
( select 'caffè' as Valore
  union all select 'CafFe'
  union all select 'caffe' ) as tabella

 

Il risultato della query è:

Figura2

Il nostro database utilizza una collation sequence case-insensity (in quanto le maiuscole e le minuscole sono trattate allo stesso modo) ed accent-sensity (in quanto le accentate sono trattate diversamente dalle non accentate), proviamo quindi a cambiare la collation sequence utilizzando la select:

select distinct Valore COLLATE sql_latin1_general_cp1_ci_ai
from
( select 'caffè' as Valore
  union all select 'CafFe'
  union all select 'caffe' ) as tabella

 

Semplicemente cambiando la collation possiamo estrarre i dati diversamente da come è settato il nostro database, la clausola COLLATE, aggiunta nella selezione della nostra colonna, ci consente di agire diversamente sul risultato della DISTINCT, infatti il risultato è:

Figura3

Ancora, cambiando la collation:

select distinct Valore COLLATE sql_latin1_general_cp1_cs_as
from
( select 'caffè' as Valore
  union all select 'CafFe'
  union all select 'caffe' ) as tabella

 

 Semplicemente cambiando la collation possiamo estrarre i dati diversamente da come è settato il nostro database, la clausola COLLATE, aggiunta nella selezione della nostra colonna, ci consente di agire diversamente sul risultato della DISTINCT, infatti il risultato è:

Figura4

La lista delle COLLATIONS disponibili, completa di descrizione la otteniamo con la query:

SELECT *
FROM fn_helpcollations()

 

 

Figura5


Tags: sql server,sql,T-SQL

 
x