我有一些數據存儲在 SQL Server 中,如下所示:A1A2A31A2A3A怎么排序呢?我試過這個查詢:select namefrom Analyze_Tablegroup by nameorder by CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name+'z')-1)),name但這僅按第一個數字和字母順序排序,而不按字母順序和數字值排序
2 回答

aluckdog
TA貢獻1847條經驗 獲得超7個贊
我試圖只對名稱的數字部分進行排序,不包括第一個或最后一個字符。然后如果有 2 個相同的數字,他們將重新排序,例如 23 和 23A。這應該會給你你正在尋找的輸出
select name
from Analyze_Table
group by name
order 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

qq_花開花謝_0
TA貢獻1835條經驗 獲得超7個贊
如果您想要以數字開頭的名稱,那么這就是您的意思嗎?
order by (case when name like '[0-9]%' then 1 else 2 end), name
- 2 回答
- 0 關注
- 112 瀏覽
添加回答
舉報
0/150
提交
取消