【发布时间】:2019-06-29 01:44:26
【问题描述】:
谁能解释一下这种奇怪的行为:
select a from (
select '1' as a
union all
select '2' as a
union all
select '-3' as a
) as b
order by a desc
select a from (
select '4' as a
union all
select '5' as a
union all
select '-3' as a
) as b
order by a desc
查询 1 的结果:
-3
2
1
查询 2 的结果:
5
4
-3
看起来- 字符被忽略了。不过,我认为 SQL Server 会根据 ASCII 代码订购 varchars。
所以预期的结果是:
2
1
-3 //ascii - is before 0-9
和:
5
4
-3 //ascii - is before 0-9
如果我在数字前添加一个字母,我会得到相同的结果:
select a from (
select 'a1' as a
union all
select 'a2' as a
union all
select '-a3' as a
) as b
order by a desc
select a from (
select 'a4' as a
union all
select 'a5' as a
union all
select '-a3' as a
) as b
order by a desc
【问题讨论】:
-
我怀疑排序规则设置很重要。使用您定义的显式数字 SortOrder 列来控制排序顺序几乎总是更好。
-
SQL Sorting and hyphens 可能重复?
-
那些字符串是字符串,不是数值。
-
字符串值 '1000' 将排在 '9' 之前,而数值 9 将排在 1000 之前。
-
@Makla:我已经检查了您的查询,它给了我完美的结果
标签: sql sql-server tsql