ORDER BY ...在SQL Server中收集

时间:2012-12-11 14:49:34

标签: sql-server sql-order-by collation case-sensitive

在SQL Server下。表格包含一些具有不同案例的文本。我想对它们区分大小写,并认为COLLATE中的ORDER BY会这样做。它没有。为什么呢?

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,结果将保持不变。

2 个答案:

答案 0 :(得分:10)

您需要对所需排序顺序进行二进制排序规则,并A-Z之前排序a-z

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin

CS排序规则对aAbB ... zZ

进行排序

答案 1 :(得分:8)

因为 是正确区分大小写的排序规则排序顺序。在Case Sensitive Collation Sort Order中解释了为什么会出现这种情况,它与Unicode specifications for sorting有关。 aa将在AA之前排序,但AA将在ab之前排序。