在 Rails 中使用数字和文本对字符串进行排序



在我的数据库中,我有一个包含成绩的名称列的表格,例如 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)


SQL 小提琴演示

相关内容

  • 没有找到相关文章

最新更新