我在mysql数据库表中有一个名为rating
的列,其中包含来自1+,2+,................9+,10+,12+
的多个值。当我用查询
select * from tbl_app order by rating desc
我将9+
作为最高价值,任何人都可以告诉我如何将12+
作为最高价值
答案 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
答案 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+'
也是如此。这实际上就是你的整个问题:当你将数字存储为整数并在显示时添加+
装饰时,你将数字存储为装饰字符串。你真的应该修复你的架构,而不是添加丑陋的黑客来解决你的架构奇怪的想法。