MySQL首先将字符串作为整数排序

时间:2015-03-27 11:24:54

标签: mysql innodb

SELECT code
FROM lock
ORDER BY code * 1

这将返回以下结果:

|code| 
|T6  |
|X30 |  
|4   |

我需要更改查询,以便按此顺序返回code行:

|code|
|4   |
|T6  |
|X30 |

code列的类型为VARCHAR,因此查询中会出现 hacky 。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

SELECT 
*
FROM t
ORDER BY 
CAST(code AS signed) > 0 DESC,
code

答案 1 :(得分:0)

嗯......我知道一个丑陋但有效的解决方案:)

ORDER BY
`code` REGEXP '^[0-9]+$' DESC,
`code` DESC

REGEXP将在匹配时返回1,在没有匹配时返回0。

答案 2 :(得分:0)

一种可能的解决方案是:

SELECT  *
FROM       lock
ORDER BY CASE WHEN code LIKE '%[0-9]%' THEN 1
            ELSE 0
        END ASC ,
        code