mysql - 如何按 10 以外的基数中的一列数字进行排序

标签 mysql

例如,使用以下查询

SELECT 指标 FROM 计划 ORDER BY 指标 ASC;

如下表

+-----------+
| indicator |
+-----------+
| a         |
| 4         |
| b         |
| 2         |
| 1         |
| 8         |
| s         |
| 11        |
| k         |
| e         |
+-----------+

我得到字母顺序

+-----------+
| indicator |
+-----------+
| 1         |
| 11        |
| 2         |
| 4         |
| 8         |
| a         |
| b         |
| e         |
| k         |
| s         |
+-----------+

我真正想要的是这个?

+-----------+
| indicator |
+-----------+
| 1         |
| 2         |
| 4         |
| 8         |
| a         |
| b         |
| e         |
| k         |
| s         |
| 11        |
+-----------+

编辑:数字以 36 为基数

最佳答案

您的数字由 mysql 以文本形式存储,因此您需要将值转换为数字,以便 mysql 能够将其按数字排序。

在mysql中conv()函数可用于在基数之间转换数字。将数字转换为基数 10 并将其解释为数字(conv() 返回结果的字符串表示形式):

SELECT indicator FROM schedules ORDER BY CONV(indicator, 36, 10) + 0 ASC;

警告:mysql 将无法使用索引来加速排序操作。如果您有大量记录,请考虑存储十进制数字或使用计算列来为您进行计算。

关于mysql - 如何按 10 以外的基数中的一列数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41325516/

相关文章:

php - 代码点火器 : Displaying raw SQL query to table. 错误 1064

mysql - 使用 Clang 编译 MYSQL 示例

mysql - 为什么这个查询很慢?

php - 多行左连接

php echo 不打印数据

mysql - 在 MySql 存储过程中显示带有动态日期的月度考勤报告

php - 将数组传递给 MySQL 例程 IN 运算符

mysql - 用于计算开仓当前余额的 SQL 查询

php - 在 PDO 查询上设置 group_concat_max_len

java.sql.SQLException : Before/after start of result set