如何对mysql数据库中的列进行排序

时间:2013-12-03 05:21:34

标签: mysql database

我在mysql数据库表中有一个名为rating的列,其中包含来自1+,2+,................9+,10+,12+的多个值。当我用查询

对这个列进行排序时
select * from tbl_app order by rating desc

我将9+作为最高价值,任何人都可以告诉我如何将12+作为最高价值

4 个答案:

答案 0 :(得分:1)

SELECT rating,SUBSTR(rating,1,LENGTH(rating)-1) FROM tbl_app ORDER BY CAST(SUBSTR(rating,1,LENGTH(rating)-1) as SIGNED) DESC;

如果最后一个字符始终为'+',则上面的sql将起作用。

答案 1 :(得分:0)

试试这个:

select convert(replace(rating,'+',' '),unsigned integer) as x from tab order by x desc

sql_fiddle_demo

答案 2 :(得分:0)

你保留了列评级的数据类型是什么?如果您保留了varchar或text,则此查询将无法按降序排序值。

答案 3 :(得分:0)

在MySQL中最简单的事情可能是将那些奇怪的字符串转换为数字:

order by cast(rating as unsigned) desc
-- or less explicitly
order by rating + 0 desc

这两个演员都会在点击+时停止尝试将字符串转换为数字,这样你就可以用数字排序。

简单地从字符串中删除加号仍会留下字符串,而'10' < '2'对于字符串'10+' < '2+'也是如此。这实际上就是你的整个问题:当你将数字存储为整数并在显示时添加+装饰时,你将数字存储为装饰字符串。你真的应该修复你的架构,而不是添加丑陋的黑客来解决你的架构奇怪的想法。