SQL Order By with column,分别包含数字和字母

时间:2015-10-07 08:14:29

标签: sql

当我在SQL中执行ORDER BY时,数据看起来像这样。

ColumnName  
----------
1  
100  
10000  
25  
30  
33  
7000  
ABC  
XZY

我希望订单按此方式工作。

ColumnName  
----------
10000  
7000  
100   
33   
30   
25  
1   
ABC   
XYZ   

首先按数值排序,然后按字母排序。

3 个答案:

答案 0 :(得分:0)

使用此解决方案:

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

答案 1 :(得分:0)

SQL-Server 的解决方案。

您可以使用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

<强>样本

您可以在 SQL FIDDLE

进行测试

答案 2 :(得分:0)

您可以通过以下SQL查询来实现:

SELECT ColumnName 
FROM tbl
ORDER BY CAST(ColumnName as UNSIGNED) DESC, ColumnName ASC;