如何通过10以外的基数中的一列数字进行排序

时间:2016-12-26 00:38:13

标签: mysql

例如,使用以下查询

SELECT indicator FROM schedules ORDER BY indicator 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        |
+-----------+

编辑:Numers在基地36

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

您可以先按长度排序,然后按实际内容排序。 无需转换!

SELECT indicator
FROM schedules
ORDER BY length(indicator), 
  indicator ASC;