MySQL按字符串排序为数字(较大的数字高于较小的数字)
考虑以下结果,其中MySQL按字符串排序为数字(较大的数字高于较小的数字),mysql,innodb,Mysql,Innodb,考虑以下结果,其中code类型为VARCHAR: SELECT code FROM lock ORDER BY CAST(code AS signed) > 0 DESC, `code |code| |4 | |420 | |5 | |T6 | |X30 | 如何更改查询,使其按以下顺序返回结果: |code| |4 | |5 | |420 | |T6 | |X30 | 例如: 第一个订单将把数字排在前面。第二个顺序将只对数字进行升序排序,而第一个顺序将保
code
类型为VARCHAR
:
SELECT code
FROM lock
ORDER BY CAST(code AS signed) > 0 DESC, `code
|code|
|4 |
|420 |
|5 |
|T6 |
|X30 |
如何更改查询,使其按以下顺序返回结果:
|code|
|4 |
|5 |
|420 |
|T6 |
|X30 |
例如:
第一个订单将把数字排在前面。第二个顺序将只对数字进行升序排序,而第一个顺序将保持数字在开头。第三个将只对字符串进行升序排序,数字将保持顺序,因为它们已经排序。LENGTH()
函数用于获取字符串的长度:
SELECT code
FROM lock
ORDER BY LENGTH(code), code
OUT:
+------+
| code |
+------+
| 4 |
| 5 |
| T6 |
| 420 |
| X30 |
+------+
注意:我曾在我意外创建的另一个帐户上发布过一个类似的问题(请求删除),请注意此问题与代码ASC的代码>0订单锁的代码略有不同
SELECT CAST(代码为已签名的代码)
@rockerbo这将删除T6
和X30
(但数字的顺序是否正确)在问题的示例中,T6
比420
短,是否在420
之后?编辑:示例查询结果很抱歉,此答案是错误的,这不是用户想要的。
SELECT code
FROM lock
ORDER BY LENGTH(code), code
+------+
| code |
+------+
| 4 |
| 5 |
| T6 |
| 420 |
| X30 |
+------+