我有名称为sth-1
, sth-2
, .........sth-10
等sth-11
的表。
我想按顺序对它们进行排序,但是1, 11, 12, .., 2,3
当按名称按顺序排序时,它会以此类推asc
。
任何帮助表示赞赏
我有名称为sth-1
, sth-2
, .........sth-10
等sth-11
的表。
我想按顺序对它们进行排序,但是1, 11, 12, .., 2,3
当按名称按顺序排序时,它会以此类推asc
。
任何帮助表示赞赏
如果数字总是跟随 - 这应该对你有用
SELECT *
FROM table
ORDER BY CAST(SUBSTRING(column,LOCATE('-',column)+1) AS SIGNED)
这个原始查询来自
根据您的需要采用
这是因为您正在尝试对字符串进行排序,而不是对数字进行排序。
解决这个问题的一种方法是创建一个单独的 int 列,这样排序会更快一些。
另一种方式是这样的:
SELECT * FROM `table` ORDER BY CAST(SUBSTRING(column,LOCATE('-',column)+1) AS SIGNED)
就我个人而言,我更喜欢使用单独的列,因此您不必真正依赖名称格式。
另一种方法是先按长度排序,然后按字段排序:
order by char_length(col), col