我正在使用 SQL Server 2012,并且我有一个数据库SQL_Latin1_General_CP1_CI_AS
整理:
create table testtable (c nvarchar(1) null)
insert into testtable (c) values('8')
insert into testtable (c) values('9')
insert into testtable (c) values(':')
insert into testtable (c) values(';')
select c, ASCII(c) ascvalue
from testtable
order by c
我得到这个输出:
c | ascvalue
------------
: | 58
; | 59
8 | 56
9 | 57
为什么 SQL Server 的排序顺序与 ASCII 码顺序相反?
谢谢罗斯等人!找到以下文档,其中对 MS SQL Server 排序规则有很好的解释,我想我会将其发布在这里,以使遇到此问题或相关问题的人受益。
整理
排序规则指定表示数据集中每个字符的位模式。排序规则还确定排序和比较数据的规则。 SQL Server 支持在单个数据库中存储具有不同排序规则的对象。对于非 Unicode 列,排序规则设置指定数据的代码页以及可以表示哪些字符。在非 Unicode 列之间移动的数据必须从源代码页转换为目标代码页。
欲了解更多详细信息,请阅读此处http://goo.gl/RpBGWN
从我的代码片段中,如果我想按二进制顺序对值进行排序,则可以将查询更改为以下内容:
select c, ASCII(c) ascvalue from testtable order by c collate Latin1_General_BIN
或者在创建表时更改排序规则定义
create table testtable (c nvarchar(1) collate Latin1_General_BIN null)
产生以下结果:
c | ascvalue
------------
8 | 56
9 | 57
: | 58
; | 59
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)