2012-12-11 37 views
7

在SQL Server下。表格包含一些具有不同案例的文本。我想對它們區分大小寫,並認爲ORDER BY中的COLLATE會這樣做。它沒有。爲什麼?ORDER BY ... COLLATE在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 

兩個查詢返回相同的,即使第一個是「CS」爲區分大小寫

aaa1 
AAB2 
aba3 

(在第一種情況下,我想AAB2, aaa1, aba3

我的服務器是SQL Server Express 2008(10.0.5500)及其默認服務器排序規則爲Latin1_General_CI_AS

數據庫的排序規則也是Latin1_General_CI_AS

如果我用SQL_Latin1_General_CP1_CS_AS代替Latin1_General_CS_AS,結果保持不變。

回答

8

您需要一個二進制排序規則來排序,A-Z排序在a-z之前。

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin 

的CS整理排序aAbB ... zZ