当值具有String和Numbers时,在SQL中排序

时间:2014-04-11 21:36:46

标签: sql sql-server sql-server-2012

SQL Server 2012

我在'name'列中有这样的值

AMOU
VHOR
1A
7W1
11W
12W
我正在使用此查询按顺序对它们进行排序
select * from Unit c where expsetid=382 order by CONVERT(INT,substring(name, 0, PATINDEX('%[^0-9]%', name+'z'))) asc 当我通过desc订购时,我得到了

12W
11W
7W1
1A
AMOU
VHOR

但我希望它们在desc

时按顺序排列
12W
11W
7W1
1A
VHOR
AMOU

2 个答案:

答案 0 :(得分:1)

您使用0作为substring的起始索引,而应该是1

当你使用零时,你实际上得到一个空字符串,它被转换为0,因此首先排序alpha字符串。当您使用1时,您正确地转换为int错误。

答案 1 :(得分:0)

感谢大家帮助我按照预期找到解决方案。这是适用于我的情况的查询。

select * from Unit c 
where expsetid=382
order by Row_Number() over (Order By CONVERT(INT,substring(name, 0, PATINDEX('%[^0-9]%', name+'z')))) desc