2012-10-08 42 views
3

在我的数据库中,我有一个包含成绩的名称列,如1.等级,2.等级等。当数字达到10或更多时,按照我的意愿排序不起作用,因为10级在排序后的记录集中排在第2位。我知道这是因为字符串排序不同于整数排序。问题是如何以数字方式对这些字符串进行排序。在Rails中使用数字和文本对字符串进行排序

因为等级记录是带有祖先插件的树构建的一部分,所以我必须将整个排序代码放在里面:order =>“(一些对结果排序的代码)”。我想尝试:order => "CAST(SUBSTRING_INDEX(name, '.') AS SIGNED)"。但这不起作用。

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

回答

3

试试这个:

取代常量值'。您的列的'级'与空字符串,那么你得到的数值。投同为int

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

编辑

按你的评论,如果它不是 '档次' 始终,然后尝试

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


SQL fiddle demo

+0

谢谢!这真的很好!但是还有另外一个问题:有时候,字符串的“。grade”部分会有所不同,即使用另一种语言(“.trinn”)。可能有几种语言。有没有办法从给定的字符中删除字符串中的所有内容,比如数字后的所有内容(包括'。')? –

+0

@JohanHovda:我已经更新了我的答案.. plz检查 –

+0

@JohanHovda:我已经更新了我的答案.. plz现在检查 –

相关问题