2015-10-07 58 views
-2

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

先按数字值再按字母顺序。

+0

为了测试它通过使用相同或类似的区分文字数字,投数值,按该desc命令,由其他asc命令 – jarlh

回答

0

解决方案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

+1

非常感谢,很好,.. .. –

0

使用此解决方案:

SELECT someColum as sort, someColumn, otherColums... 
WHERE someOther = 'somevalue' 
ORDER BY sort ASC, (someColumn +0) ASC