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

SQL Order By with列,该列分别包含数字和字母,sql,Sql,在SQL中执行ORDER BY时,数据如下所示 ColumnName ---------- 1 100 10000 25 30 33 7000 ABC XZY 我想让order by像这样工作 ColumnName ---------- 10000 7000 100 33 30 25 1 ABC XYZ 先按数值排序,然后按字母排序。使用此解决方案: SELECT someColum as sort, s

在SQL中执行ORDER BY时,数据如下所示

ColumnName  
----------
1  
100  
10000  
25  
30  
33  
7000  
ABC  
XZY
我想让order by像这样工作

ColumnName  
----------
10000  
7000  
100   
33   
30   
25  
1   
ABC   
XYZ   
先按数值排序,然后按字母排序。

使用此解决方案:

SELECT someColum as sort, someColumn, otherColums... 
WHERE someOther = 'somevalue' 
ORDER BY sort ASC, (someColumn +0) ASC
SQL Server的解决方案

您可以使用
案例
。当值为数字时,将其转换为
INT
并按降序排列,否则,如果值不是数字,则按升序排列

查询

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查询来实现这一点:

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

在“排序依据”中,使用“相似”或“相似”来区分数字与文本、强制转换数值、按该描述排序、按其他asc排序