我的表名为sth-1
,sth-2
,......... sth-10
,sth-11
等等。
我想按顺序对它们进行排序,但它会以1, 11, 12, .., 2,3
的形式提取,依此类推,按asc
顺序排序。
任何帮助表示赞赏
答案 0 :(得分:2)
如果数字始终遵循 -
,这应该对你有用SELECT *
FROM table
ORDER BY CAST(SUBSTRING(column,LOCATE('-',column)+1) AS SIGNED)
此原始查询来自
Sorting string column containing numbers in SQL?
根据您的需求
答案 1 :(得分:1)
这是因为你试图对字符串进行排序,而不是数字。
另一种方法是创建一个单独的int列,以便在排序时加快一点。
另一种方式就是这个:
SELECT * FROM `table` ORDER BY CAST(SUBSTRING(column,LOCATE('-',column)+1) AS SIGNED)
我个人更喜欢使用单独的列,因此您并不真正依赖名称格式。
答案 2 :(得分:0)
另一种方法是按长度排序,然后按字段排序:
order by char_length(col), col