例如,使用以下查询
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
答案 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;