m0_74879466 2024-04-18 18:49 采纳率: 73.4%
浏览 8
已结题

mysql为什么排序不对10.08100100100开始到379.65379.8就到两位数3838

SELECT * FROM p  order by `size` 

mysql为什么排序不对
10.08
100
100
100开始到
379.65
379.8就到两位数
38
38

img

  • 写回答

4条回答 默认 最新

  • 檀越@新空间 2024-04-18 18:49
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    问题可能出现在对size字段的排序上。根据提供的信息,可以看出在排序结果中,10.08被排在了379.65和379.8之前,而38和N@m074879466被排在了379.65和379.8之后。这可能是因为size字段的数据类型是字符串,而不是数字。

    MySQL对字符串进行排序时,是根据字符的ASCII码值进行排序的。因此,它将按字典顺序对字符串进行排序,而不是按数值大小进行排序。在ASCII码中,数字字符的顺序是根据其字符值来排序的,而不是按数值大小来排序的。

    解决这个问题的方法是将size字段的数据类型更改为数值类型,如DECIMAL或FLOAT。这样MySQL就可以按数值大小进行排序了。

    解决方案:

    1. size字段的数据类型更改为数值类型,在创建表时或使用ALTER TABLE语句进行修改。
    ALTER TABLE p MODIFY COLUMN `size` DECIMAL(10, 2);
    
    1. 执行排序查询时,使用CAST函数将size字段转换为数值类型,并按数值进行排序。
    SELECT * FROM p ORDER BY CAST(`size` AS DECIMAL(10, 2));
    

    这样,排序结果应该就按照数值大小进行了排序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月30日
  • 已采纳回答 4月22日
  • 创建了问题 4月18日