1

我有名称为sth-1, sth-2, .........sth-10sth-11的表。

我想按顺序对它们进行排序,但是1, 11, 12, .., 2,3当按名称按顺序排序时,它会以此类推asc

任何帮助表示赞赏

4

3 回答 3

2

如果数字总是跟随 - 这应该对你有用

SELECT   *
FROM     table
ORDER BY CAST(SUBSTRING(column,LOCATE('-',column)+1) AS SIGNED)

这个原始查询来自

在SQL中对包含数字的字符串列进行排序?

根据您的需要采用

于 2013-09-08T10:49:47.817 回答
1

这是因为您正在尝试对字符串进行排序,而不是对数字进行排序。

解决这个问题的一种方法是创建一个单独的 int 列,这样排序会更快一些。

另一种方式是这样的:

SELECT * FROM `table` ORDER BY CAST(SUBSTRING(column,LOCATE('-',column)+1) AS SIGNED)

就我个人而言,我更喜欢使用单独的列,因此您不必真正依赖名称格式。

于 2013-09-08T10:51:41.280 回答
0

另一种方法是先按长度排序,然后按字段排序:

order by char_length(col), col
于 2013-09-08T12:26:03.380 回答