當我在SQL中執行ORDER BY
時,數據看起來像這樣。SQL Order By列,其中分別有數字和字母
ColumnName
----------
1
100
10000
25
30
33
7000
ABC
XZY
我想通過這樣的工作順序。
ColumnName
----------
10000
7000
100
33
30
25
1
ABC
XYZ
先按數字值再按字母順序。
當我在SQL中執行ORDER BY
時,數據看起來像這樣。SQL Order By列,其中分別有數字和字母
ColumnName
----------
1
100
10000
25
30
33
7000
ABC
XZY
我想通過這樣的工作順序。
ColumnName
----------
10000
7000
100
33
30
25
1
ABC
XYZ
先按數字值再按字母順序。
解決方案SQL-服務器。您可以使用CASE
。值爲數字時,將其轉換爲INT
,並按 - 降序排列,否則如果值不是數字,則按升序排列。
QUERY
SELECT ColumnName
FROM tbl
ORDER BY CASE WHEN ISNUMERIC(ColumnName) = 1 THEN CAST(ColumnName AS INT) END DESC,
CASE WHEN ISNUMERIC(ColumnName) = 0 THEN col END ASC
注:你必須將數字值的數據類型INT
實現正確的順序。如果您嘗試將數值存儲爲varchar,則會得到不正確的結果。例如:
如果我們使用降序,'10000'將會在'7000'之後,因爲'10000'的第一個符號1
低於'7000'varchar值的7
。所以這將是:
7000
10000
DEMO
您可以在SQL FIDDLE
非常感謝,很好,.. .. –
使用此解決方案:
SELECT someColum as sort, someColumn, otherColums...
WHERE someOther = 'somevalue'
ORDER BY sort ASC, (someColumn +0) ASC
爲了測試它通過使用相同或類似的區分文字數字,投數值,按該desc命令,由其他asc命令 – jarlh