如何对mysql数据库中的列进行排序
我在mysql数据库表中有一个名为如何对mysql数据库中的列进行排序,mysql,database,Mysql,Database,我在mysql数据库表中有一个名为rating的列,其中有多个值,分别来自1+、2+、9+、10+、12+。当我使用查询对该列进行排序时 select * from tbl_app order by rating desc 我将9+作为最高值,有人能告诉我如何将12+作为最高值吗 select convert(replace(rating,'+',' '),unsigned integer) as x from tab order by x desc 试试这个: select convert
rating
的列,其中有多个值,分别来自1+、2+、9+、10+、12+
。当我使用查询对该列进行排序时
select * from tbl_app order by rating desc
我将9+
作为最高值,有人能告诉我如何将12+
作为最高值吗
select convert(replace(rating,'+',' '),unsigned integer) as x from tab order by x desc
试试这个:
select convert(replace(rating,'+',' '),unsigned integer) as x from tab order by x desc
如果最后一个字符始终为“+”,则上面的sql将起作用
如果最后一个字符始终是“+”,则上面的sql将起作用。您保留了列评级的数据类型是什么?如果您将其保留为varchar或text,则此查询将无法按降序对值进行排序 您保留了列评级的数据类型是什么?如果您将其保留为varchar或text,则此查询将无法按降序对值进行排序 在MySQL中最简单的方法可能是将那些看起来奇怪的字符串转换为数字:
order by cast(rating as unsigned) desc
-- or less explicitly
order by rating + 0 desc
当这两个类型转换命中+
时,它们将停止尝试将字符串转换为数字,因此您可以将它们按数字排序
简单地从字符串中删除加号仍然会留下字符串,
'10'<'2'
对于字符串来说与'10+'<'2+'
一样正确。这实际上是您的全部问题:当您应该将数字存储为整数时,您将数字存储为修饰字符串,当您显示它们时,您将添加+
修饰。你真的应该修正你的模式,使其有意义,而不是添加丑陋的黑客来解决你的模式的奇怪想法。在MySQL中,最简单的方法可能是将那些看起来奇怪的字符串转换成数字:
order by cast(rating as unsigned) desc
-- or less explicitly
order by rating + 0 desc
当这两个类型转换命中+
时,它们将停止尝试将字符串转换为数字,因此您可以将它们按数字排序
简单地从字符串中删除加号仍然会留下字符串,
'10'<'2'
对于字符串来说与'10+'<'2+'
一样正确。这实际上是您的全部问题:当您应该将数字存储为整数时,您将数字存储为修饰字符串,当您显示它们时,您将添加+
修饰。你真的应该修正你的模式以使其有意义,而不是添加丑陋的黑客来解决你的模式的奇怪想法。一列有多个值,如“1+,2+,…….9+,10+,12+”?你试过“按评级+1描述排序”吗?@JungsuHeo:可能是一个包含字符串的列,如'1+'
,'2+”
。。。,“12+”
@muistooshort-Ah。。我懂了。谢谢。我要问你为什么要把数字存储为那些看起来很滑稽的字符串。一列有多个值,比如“1+,2+,…….9+,10+,12+”?你试过“按评级+1描述排序”吗?@JungsuHeo:可能是一列,其中包含字符串,比如'1+'
,'2+,'12+,
@muistoshort。。我懂了。谢谢。我要问你为什么要将数字存储为那些看起来很滑稽的字符串。演员阵容可以发挥作用,但你并不真正需要substr
之类的东西,MySQL在演员阵容中会忽略第一个非数字字符之后的所有内容。@muistooshort 3Q~正如你所说,我做了一个测试,效果也不错。我以前不知道..啊哈~学点东西,很高兴~演员阵容可以发挥作用,但你并不真的需要substr
的东西,MySQL在演员阵容中会忽略第一个非数字字符后的所有内容。@muistooshort 3Q~正如你所说,我做了一个测试,效果也不错。我以前不知道..啊哈~学点东西,开心吗~