MySQL按字符串数字排序、按百分比排序

MySQL3周前更新 admin
1,830 0 0

按字符串数字排序

  • 在 SQL 中,如果列的数据类型是数字类型(如整数、小数等),数据库引擎可以直接按照数字大小进行排序。然而,如果列的数据类型是字符串,但其中存储的是数字内容,情况就比较复杂。
  • 当按照字符串排序时,数据库会根据字符编码顺序来排列。例如,在 ASCII 编码中,字符 ‘1’ 的编码小于字符 ‘2’,但字符串 ’10’ 会小于 ‘2’,因为排序是基于字符逐个比较的,先比较 ‘1’ 和 ‘2’,而不是按照数字的实际大小。

所以需要把字符串类型的数字转为数字类型的,mysql可以使用 cast 或者 convert 函数进行转换。

举例:

MySQL按字符串数字排序、按百分比排序

select * from user a order by cast(a.num as decimal(10,2)) desc

结果:MySQL按字符串数字排序、按百分比排序

若字段中全是整数无小数点,也可以使用下面的方式进行排序

select * from test order by cast(number as SIGNED) desc

按百分比排序

按百分比排序,需要把百分号去掉,剩下的和按字符串数字排序处理方法一样。

去掉百分号:使用REPLACE函数(mysql8及以上也可以使用正则表达式提取数字,REGEXP_SUBSTR(file_name , ‘\\d+’))

select * from user a order by cast(REPLACE(a.rate, '%', '') as decimal(10,2)) desc

结果:MySQL按字符串数字排序、按百分比排序

© 版权声明

相关文章

暂无评论

暂无评论...