按数字顺序排序字符串

时间:2014-12-18 12:47:37

标签: mysql sql mysqli sql-order-by

让我们说,我有一张桌子,我想按字段和字号排序。当我使用ORDER BY size时,会出现类似这样的内容:

size 100
size 105
size 110
size 115
size 85
size 90
size 95

每行中的字符串可以不同,这只是一个例子,当有相同的字符串 - size时。我想回复一下:

size 85
size 90
size 95
size 100
size 105
size 110
size 115

我知道,用数字字符串排序可以用ORDER BY CAST(size AS UNSIGNED)来完成,但是当它不是数字字符串时,如何做到这一点,但字段是带数字的字符串?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我这样做的简单方法是使用长度作为键:

order by length(size), size

或者,使用substring_index()

order by substring_index(size, ' ', 1),
         substring_index(size, ' ', -1) + 0

+ 0进行静默转换,将第二个值转换为数字。

答案 1 :(得分:1)

你是部分正确的。您只需从字母数字列中获取数字

即可
SELECT   *
FROM     MyTable
ORDER BY CAST(SUBSTRING(size, LOCATE(' ',size)+1) AS SIGNED)