2012-12-11 11 views
7

Pod SQL Server. Tabela zawiera trochę tekstu z różnymi przypadkami. Chcę posortować je pod kątem wielkości liter i pomyślałem, że zrobi to COLLATE w ORDER BY. Tak nie jest. Czemu?ORDER BY ... COLLATE w 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 

obu zapytań powrócić takie same, nawet jeśli pierwszy jest "CS" dla rozróżniana

aaa1 
AAB2 
aba3 

(w pierwszym przypadku, chcę AAB2, aaa1, aba3)

Mój serwer jest SQL Server Express 2008 (10.0.5500) i jego domyślne sortowanie na serwerze to Latin1_General_CI_AS.

Zestawienie bazy danych to również Latin1_General_CI_AS.

Wynik pozostaje taki sam, jeśli użyję SQL_Latin1_General_CP1_CS_AS zamiast Latin1_General_CS_AS.

Odpowiedz

8

Potrzebne jest zestawienie binarne dla żądanej kolejności sortowania z A-Z posortowane przed a-z.

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin 

CS sortowania sortuje aAbB ... zZ