SELECT code
FROM lock
ORDER BY code * 1
这将返回以下结果:
|code|
|T6 |
|X30 |
|4 |
我需要更改查询,以便按此顺序返回code
行:
|code|
|4 |
|T6 |
|X30 |
code
列的类型为VARCHAR
,因此查询中会出现 hacky 。有什么想法吗?
答案 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