在我的数据库中,我有一个包含成绩的名称列的表格,例如 1. grade、2. grade,等等。当数字达到 10 或更多时,排序不会像我想要的那样工作,如 10。成绩在 2 之前。排序记录集中的等级。我知道这是因为字符串排序与整数排序不同。问题是如何以数字方式对这些字符串进行排序。
因为成绩记录是带有祖先插件的树构建的一部分,所以我必须将整个排序代码放在 :order => "(一些对结果进行排序的代码)"中。
我试过:order => "CAST(SUBSTRING_INDEX(name, '.') AS SIGNED)"
.但这行不通。
我在开发环境中使用 SQLite,在生产环境中使用 MySQL。
试试这个:
将列的常量 vale '. grade' 替换为空字符串,然后得到数值。 将相同转换为 int
order by cast(replace(name,'. grade','') as int)
编辑:
根据您的评论,如果它不是总是"等级",请尝试
order by cast(left(name,LOCATE('.',name,1)-1) as UNSIGNED)