MySQL ORDER BY string as number(较大的数字高于较小的数字)

标签 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 |

最佳答案

SELECT code
FROM lock
ORDER BY CAST(code AS signed) > 0 DESC, CAST(code AS signed) ASC, code ASC

第一个顺序会将数字排序到前面。第二个顺序只会对数字进行升序排序,而第一个顺序会将它们保留在开头。第三个将仅对字符串进行升序排序,数字将保持其顺序,因为它们已经排序。

关于MySQL ORDER BY string as number(较大的数字高于较小的数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29300307/

相关文章:

MySQL 合并具有等效 ID 的行

mysql - 将值从 NULL 更新为存储在同一表中的特定值

mysql - MySQL 是否记录它使用索引的频率?

mysql LAST_INSERT_ID 带参数序列实现

MySQL:VARCHAR 的大小与 PK 一样快,与 INT 一样快吗?

MySQL - 为什么我的 innodb_force_recovery 显示为 "unknown variable"

mysql - 获取连接表不起作用 codeigniter

php - 如何 if else 显示其他内容 laravel

MySQL奇怪的date_add间隔

mysql - 如何基于解释/索引提高查询性能