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

MySQL order strings as integers with integers first

SELECT code
FROM lock
ORDER BY code * 1

这会return以下结果:

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

我需要更改查询,使其 return 成为 code 行的顺序:

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

code 列的类型为 VARCHAR,因此查询中的 hacky 强制转换。有什么想法吗?

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

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

REGEXP 将 return 匹配时为 1,不匹配时为 0。

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

一个可能的解决方案是:

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