2012-12-11 9 views
7

in SQL Server. Una tabella contiene del testo con casi diversi. Voglio distinguerli tra maiuscole e minuscole e ho pensato che un ORDER BY lo avrebbe fatto con lo ORDER BY. Non è così. Perché?ORDINA DA ... COLLATE in SQL Server

CREATE TABLE T1 (C1 VARCHAR(20)) 
INSERT INTO T1 (C1) VALUES ('aaa1'), ('AAB2'), ('aba3') 

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_CS_AS 
SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_CI_AS 

entrambe le query restituiscono lo stesso, anche se il primo è "CS" per

aaa1 
AAB2 
aba3 

(nel primo caso, voglio AAB2, aaa1, aba3) tra maiuscole e minuscole

Il mio server è un SQL Server Express 2008 (10.0.5500) e le regole di confronto dei server predefinite sono Latin1_General_CI_AS.

Anche la raccolta del database è Latin1_General_CI_AS.

Il risultato rimane lo stesso se si utilizza SQL_Latin1_General_CP1_CS_AS al posto di Latin1_General_CS_AS.

risposta

8

È necessario un confronto binario per il tipo di ordinamento desiderato con A-Z ordinato prima di a-z.

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin 

La raccolta CS smista aAbB ... zZ