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
答案 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