SQL Server - 排序规则 - Latin1_General_CI_AS和Latin1_General_CS_AS之间的差异

时间:2016-09-08 10:14:04

标签: sql-server collation

我如何看待

之间的区别
SELECT * 
FROM (VALUES ('A'),('B'),('Y'),('Z'), ('a'),('b'),('y'),('z')) V(C)
ORDER BY C COLLATE Latin1_General_CS_AS

SELECT * 
FROM (VALUES ('A'),('B'),('Y'),('Z'), ('a'),('b'),('y'),('z')) V(C)
ORDER BY C COLLATE Latin1_General_CI_AS

?对于这组字符没有区别。

干杯 的Bartosz

1 个答案:

答案 0 :(得分:1)

将一个整数ID列添加到您的值集中,并按C排序后按顺序排序。

SELECT * 
FROM (VALUES  (1,'a'),(2,'b'),(3,'y'),(4,'z'),(5,'A'),(6,'B'),(7,'Y'),(8,'Z'),(9,'a'),(10,'b'),(11,'y'),(12,'z')) V(ID,C)
ORDER BY C COLLATE Latin1_General_CS_AS,ID

SELECT * 
FROM (VALUES (1,'a'),(2,'b'),(3,'y'),(4,'z'),(5,'A'),(6,'B'),(7,'Y'),(8,'Z'),(9,'a'),(10,'b'),(11,'y'),(12,'z')) V(ID,C)
ORDER BY C COLLATE Latin1_General_CI_AS,ID

对于第一个表格,即案例敏感,“a”<> 'A',所以他们分开对待。我们的排序先将小写字母设为第一个,然后按ID(1,9)对它们进行排序,然后按大写字母A进行排序。

ID  C
1   a
9   a
5   A

在第二个表格中,'a'='A',因此它们在同一组中处理,并且3个(或A)值在ID号上一起排序

ID  C
1   a
5   A
9   a

这种模式继续为b,y和z。