【问题标题】:Sorting a varchar column as a numeric one using collate使用 collate 将 varchar 列排序为数字列
【发布时间】:2013-04-18 19:13:29
【问题描述】:
我有一个包含 VARCHAR 列的 MySQL 表。该列仅包含数字,我希望能够对其进行数字排序,即 100、101、1001。目前它将它们排序为 100、1001、101 等。我听说我可以简单地更改表格以添加整理属性,所以它将按数字排序。当我键入“显示排序规则”时,我看不到任何似乎用于将 varchar 列视为数字列的排序规则类型。
所以我的问题是,我可以使用什么排序规则来对这个 varchar 列进行数字排序?
【问题讨论】:
标签:
mysql
sorting
collate
【解决方案1】:
如果这个varchar 列只包含数字,那么它应该是一个整数列。否则,你可以这样做
ORDER BY CAST(col AS SIGNED)
See the demo
【解决方案2】:
没有将数值与数值进行比较的内置排序规则。
您可以开发自己的,但是,您将很难将其部署在共享主机和类似的东西上。
如果您可以不使用索引进行排序,您可以将其转换为整数:
SELECT *
FROM mytable
ORDER BY
CASE field REGEXP '^-?[0-9]$' THEN CAST(field AS SIGNED INTEGER) END