我在SQL Server 2005中有一个包含字母或数字的NVARCHAR(255)列。
Declare @Temp Table(Name NVARCHAR(255))
Insert Into @Temp Values('1')
Insert Into @Temp Values('2')
Insert Into @Temp Values('3')
Insert Into @Temp Values('10')
Insert Into @Temp Values('aaaa')
Insert Into @Temp Values('ccaaaaa')
Insert Into @Temp Values('cca')
Insert Into @Temp Values('cccc')
Insert Into @Temp Values('ccaa')
Select * From @Temp Order by Name
此查询返回错误结果。有人可以解释一下原因吗? 此外,有人可以告诉我使用哪个查询来排序值 我想得到下一个序列:
1
2
3
10
aaaa
cca
ccaa
ccaaaaa
cccc
由于
答案 0 :(得分:4)
@Shark向您展示了原因,我会告诉您在SELECT
中的工作,以获得您想要的结果:
Select * From @Temp
Order by
case isnumeric(name)
when 1 then cast(name as int)
else 999999999999999 end,
name
答案 1 :(得分:3)
结果的实际顺序如下:
1
10
2
3
aaaa
cca
ccaa
ccaaaaa
cccc
SQL Server正在对它进行排序,因为它是根据字符值进行排序的。换句话说,字符1
位于2
之前,10
也位于2
之前。
所以你得到奇怪的排序的原因是因为你是按字符串值排序,而不是数字。
编辑:请参阅Adrian对解决方法的回答。