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 è:

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 è:

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 è:

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 è:

La lista delle COLLATIONS disponibili, completa di descrizione
la otteniamo con la query:
SELECT *
FROM fn_helpcollations()

Tags: sql server,sql,T-SQL