数据库: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_BIN
或order 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