sql语句order by desc获取数据排序不准确?

图片描述

为什么结果不一样的?
正常来说70.00应该是最小啊?应该排在最后啊?我的price字段是varchat类型

阅读 10.4k
11 个回答

如果按照字符串来排序,这个结果是正确的,如果想按照数值排序,有以下几种方法:
1.order by price+0 desc
2.order by CAST(price as SIGNED) desc
3.order by CONVERT(price,SIGNED) desc

哥子 按照varchar的排序方法 这个就是对的啊 ,开头 8-7-7-4-3

varchar肯定不能这样直接排序啊,需要转换成int类型。
可以试试order by (price+0) desc

应该是数据类型不对,造成无法排序,目测应该是字符类型

需要把varchar转换成number型
mysql 可以使用 price+0
oracle 可以使用 to_number(price),或者 cast

查询准确,varchar类型的排序规则就是按从左向右比较排,重新定义数据类型

按分为单位存价格,db中表字段设计为 int 或者 bigint 更合适吧

varchar类型的排序规则就是按从左向右比较排,你可以重新定义数据类型
可以用convert强制转换数据类型,如果想达到理想排序效果可以order by CONVERT(price,SIGNED) desc
希望对您有帮助

varchar类型排序和字符串排序一样,先从第一位的开始比较,8,7,6,5,4,3,2,1,0这种数据,如果第一位相同比较第二位......可以考虑排序的时候转换一下,或者表数据设计成decimal类型

vchar类型和字符串类型一样,从第一位开始比,若比出大小,则就是最终结果,若比较不出,依次向下比较,直至比出结果。若比较数字大小,应定义成int类型

新手上路,请多包涵

看着有点像按字符串的第一个字符降序排的,数据类型改成浮点类型应该就正常了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏