当我在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