为什么撇号 (') 在其他 ASCII 字符之前排序?



数据库:Azure专用SQL池

排序:SQL_Latin1_General_CP1_CI_AS

create table testtable (timeenter nvarchar(30))
insert into testtable values('08:19:21''')
insert into testtable values('08:19:21$')
insert into testtable values('08:19:21%')
insert into testtable values('08:19:21(')
insert into testtable values('08:19:21"')

这是我的问题,当我排序的值,我得到这个:

select *
from (
select timeenter
, ascii(right(timeenter,1)) as ascvalue
, right(timeenter,1) as symbol
from testtable 
) x
order by timeenter

结果集:

timeenter                      ascvalue    symbol
------------------------------ ----------- ------
08:19:21'                      39          '
08:19:21"                      34          "
08:19:21$                      36          $
08:19:21%                      37          %
08:19:21(                      40          (

当我用这个排序时:order by timeenter collate Latin1_General_BINorder by timeenter collate SQL_Latin1_General_CP850_BIN,它正确排序:

timeenter                      ascvalue    symbol
------------------------------ ----------- ------
08:19:21"                      34          "
08:19:21$                      36          $
08:19:21%                      37          %
08:19:21'                      39          '
08:19:21(                      40          (

我查找了SQL_Latin1_General_CP1_CI_AS排序和CP1显示字符集是正确排序的,但在我的查询实例中排序顺序仍然是不规则的。

是否由于撇号(')是SQL的分隔符?

任何有见地的都非常感谢。

我正在寻找的答案是如何以及为什么我的实例排序的方式是基于当前的排序。我能够使数据排序的方式,我想通过tsql容易。我只是在寻找一个关于排序的解释,以及它在我的例子中如何使用撇号。

这很奇怪。"& lt;SQL_Latin1_General_CP1_CI_AS中的',如您所见

select case when '''' collate SQL_Latin1_General_CP1_CI_AS < '"' collate SQL_Latin1_General_CP1_CI_AS then 1 else 0 end

输出
0

但如果它们是unicode字符,则顺序颠倒:

select case when N'''' collate SQL_Latin1_General_CP1_CI_AS < N'"' collate SQL_Latin1_General_CP1_CI_AS then 1 else 0 end

输出
1

相关内容

  • 没有找到相关文章

最新更新