在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
,结果将保持不变。
答案 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
之前排序。