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
- 看到它在 sqlfiddle
中实时运行
一个可能的解决方案是:
SELECT *
FROM lock
ORDER BY CASE WHEN code LIKE '%[0-9]%' THEN 1
ELSE 0
END ASC ,
code
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
- 看到它在 sqlfiddle 中实时运行
一个可能的解决方案是:
SELECT *
FROM lock
ORDER BY CASE WHEN code LIKE '%[0-9]%' THEN 1
ELSE 0
END ASC ,
code