SQL Server中的奇怪比较结果

瑞安

对于没有依赖于排序规则的显式顺序的字符(即,不进行大小写折叠和/或没有去除重音符号的字符),其顺序基于基本字符中代码点的顺序值组。如果一个字符串是另一个的前缀,则较短的字符串将首先进行排序。

Unicode的前128个代码点与ASCII字符集相同,这意味着/在-之后。----来自cco的答案。

那为什么会发生以下情况?

演示:'2017/8/22 1:33:53'如何在'2017-08-13 23:12:33.411'之前

我预计'2017/8/22 1:33:53'将在'2017-08-13 23:12:33.411'/之后出现,因为之后-这是因为Chinese_PRC_CI_AS排序规则中的特殊排序吗?如果是这样,我在哪里可以找到规格?

败血症的

我希望'2017/8/22 1:33:53'在'2017-08-13 23:12:33.411'之后出现,因为/在-之后。这是因为Chinese_PRC_CI_AS排序规则中的特殊排序吗?

是的,是因为Chinese_PRC_CI_AS整理

如果是这样,我在哪里可以找到规格?

规则足够复杂,但是您可以在这里找到它们:UNICODE COLLECTION ALGORITHM

我从中提取一些文字作为图片,以使您有所了解: 在此处输入图片说明

在您的情况下,您可以尝试使用binary归类Chinese_PRC_BIN2,它将在这种情况下为您提供理想的结果,但是对于字母排序可能是不可接受的,我的意思是在欧洲语言中,二进制排序始终将大写字母放在所有小写字母之前大小写字母,但我不知道应该如何对中文符号进行排序

以下是用于按订单对日期进行排序的代码(您说过使用UNICODE列):

declare @t table (s nvarchar(100))
insert into @t values (N'2017/8/22 1:33:53'),  (N'2017-08-13 23:12:33.411')

select *
from @t
order by s collate Chinese_PRC_BIN2;

Bin2排序规则也将在“非unicode大小写”情况下作为图片中的示例工作:

select case 
      when '2017/8/22 1:33:53' collate Chinese_PRC_BIN2 < 
           '2017-08-13 23:12:33.411' collate Chinese_PRC_BIN2 
      then 'TRUE' 
      else 'FALSE' 
   end;

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章