sql server如何通过管道字符进行排序

时间:2013-10-30 22:03:45

标签: sql sql-server

在按包含管道符的字符列进行排序时,SQL服务器似乎必须执行一些特殊操作。

ascii('|')和unicode('|')

一样返回124

ascii('0')返回48

按退货排序'|'字母和数字前的字符。

我试图查看整理情况,在我看过的情况下,“|”字符总是有值124。

这是我的测试选择

select * from (
   select '0' as col1, ASCII('0') as col2, unicode('0') as col3
   union select '1' as col1, ASCII('1') as col2, unicode('1') as col3
   union select '|' as col1, ASCII('|') as col2, unicode('|') as col3
   union select 'a' as col1, ASCII('a') as col2, unicode('a') as col3
   union select ' ' as col1, ASCII(' ') as col2, unicode(' ') as col3
   union select '.' as col1, ASCII('.') as col2, unicode('.') as col3
   union select '/' as col1, ASCII('/') as col2, unicode('/') as col3

) as q
order by col1

此查询返回:

    col1  col2  col3
1           32    32
2      .    46    46
3      /    47    47
4      |   124   124
5      0    48    48
6      1    49    49
7      a    97    97

为什么124落在47到48之间?

使用的排序规则是SQL_Latin1_General_CP1_CI_AI。

如果只有二进制排序规则使用字符的ascii / unicode值进行排序,我如何找到排序规则中排序字符的排序顺序?

2 个答案:

答案 0 :(得分:3)

不同的排序规则会更改字符的比较顺序。它们更改任何字符的ASCII码或Unicode值。换句话说,归类几乎从不简单地按ASCII码或Unicode值排序。

答案 1 :(得分:0)

正如提到的一些评论和答案,按订单排序是由整理决定的。 unicode图表中字符的位置会影响订单。

来自Unicode Collation Algorithm归类序列基于多级比较算法,包括:

Base Characters
Accents
Case Variants
Punctuation
Identical Level

当两个字符串相同时,相同等级是如何打破关系的一些规则。

除了规则之外,我还希望找到针对给定排序规则的排序。我找不到任何关于给定排序规则的字符排序的文档,但可以使用查询显示。

SELECT CHAR(number) 
FROM master..spt_values 
WHERE type='P' AND number BETWEEN 0 AND 255 
ORDER BY CHAR(number) COLLATE SQL_Latin1_General_CP1_CI_AI