order by CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name+'z')-1)),name
但这仅按第一个数字和字母顺序排序,而不按字母顺序和数字值排序
牛魔王的故事
浏览 84回答 2
2回答
aluckdog
我试图只对名称的数字部分进行排序,不包括第一个或最后一个字符。然后如果有 2 个相同的数字,他们将重新排序,例如 23 和 23A。这应该会给你你正在寻找的输出select namefrom Analyze_Tablegroup by nameorder by case when isnumeric(name) = 1 then cast(name as int) when isnumeric(left(name, 1)) = 0 and isnumeric(right(name, 1)) = 0 then cast(substring(name, 2, len(name)-2) as int) when isnumeric(left(name, 1)) = 0 then cast(right(name, len(name)-1) as int) when isnumeric(right(name, 1)) = 0 then cast(left(name, len(name)-1) as int) end ,name