10

在 SQL Server 下。一个表格包含一些不同大小写的文本。我想对它们进行区分大小写的排序,并认为 aCOLLATE会这样做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

4

2 回答 2

12

您需要使用A-Zsorted before对所需的排序顺序进行二进制排序a-z

SELECT * FROM T1 ORDER BY C1 COLLATE Latin1_General_bin

CS 排序规则排序aAbB ... zZ

于 2012-12-11T14:52:36.220 回答
10

因为那正确的区分大小写的排序顺序。Case Sensitive Collat​​ion Sort Order中解释了为什么会这样,它与Unicode 排序规范有关aa会排在前面,AAAA会排在前面ab

于 2012-12-11T14:52:51.697 回答