MySQL将字符串排序为整数,先排序为整数
这将返回以下结果:MySQL将字符串排序为整数,先排序为整数,mysql,innodb,Mysql,Innodb,这将返回以下结果: SELECT code FROM lock ORDER BY code * 1 我需要更改查询,使其按以下顺序返回code行: |code| |T6 | |X30 | |4 | code列的类型为VARCHAR,因此在查询中使用hacky cast。有什么想法吗?嗯……我知道一个难看但有效的解决方案:) REGEXP将在匹配时返回1,在没有匹配时返回0 ORDER BY `code` REGEXP '^[0-9]+$' DESC, `code` DESC
SELECT code
FROM lock
ORDER BY code * 1
我需要更改查询,使其按以下顺序返回code
行:
|code|
|T6 |
|X30 |
|4 |
code
列的类型为VARCHAR
,因此在查询中使用hacky cast。有什么想法吗?嗯……我知道一个难看但有效的解决方案:)
REGEXP将在匹配时返回1,在没有匹配时返回0
ORDER BY
`code` REGEXP '^[0-9]+$' DESC,
`code` DESC
- 现场观看它的工作
- 一种可能的解决方案是:
SELECT
*
FROM t
ORDER BY
CAST(code AS signed) > 0 DESC,
code
所以排序总是基于访问顺序中的数字,并且它们总是在末尾?您是要解释字符串中的每个数字,还是仅当整个字符串都是数字时才将字符串视为数字?
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