数据库
首页 > 数据库> > mysql-在Rails中使用数字和文本对字符串进行排序

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

作者:互联网

在我的数据库中,我有一个表,该表的名称列包含成绩,例如1. grade,2.grade等.当数字达到10或更多时,排序将无法进行,因为10.成绩在已排序记录集中的2.成绩之前.我知道这是因为字符串排序不同于整数排序.问题是如何以数字方式对这些字符串进行排序.

因为成绩记录是使用祖先插件构建的树的一部分,所以我必须将整个排序代码放在:order =>中. “(一些对结果进行排序的代码)”.

我已经尝试过:order => “ CAST(SUBSTRING_INDEX(name,’.’)AS SIGNED)”.但这是行不通的.

我在开发环境中使用SQLite,在生产环境中使用MySQL.

解决方法:

尝试这个:

替换常数vale’.用空字符串对列进行“评分”,然后获得数值.将相同的内容转换为int

order by cast(replace(name,'. grade','') as int)

编辑:

根据您的评论,如果它始终不是“等级”,则尝试

order by cast(left(name,LOCATE('.',name,1)-1) as  UNSIGNED)

SQL fiddle demo

标签:sqlite,ruby-on-rails-3,sql,mysql,ancestry
来源: https://codeday.me/bug/20191127/2074988.html