mysql版本号

发布时间: 2023-11-21 10:36 阅读: 文章来源:1MUMB65PS
概述

今天主要介绍一个MySQL数据库版本号排序问题,一起来看看吧~

需求

按版本号排序,版本号字段为字符类型,其中1.2.10应大于1.2.9,但mysql数据库会认为1.2.9大于1.2.1

正确的版本号应该是

1.3.0 大于 1.2.23

1.2.10 大于 1.2.9

实现sql(错误示范)

这里以符号"."分隔并取各个值后组合排序,但仍存在问题

selectversion FROMlcp_app_version ORDER BYconcat(substring_index( version, ‘.‘, 1 ),substring_index( substring_index( version, ‘.‘, 2 ), ‘.‘,- 1 ),substring_index( version, ‘.‘,- 1 ) ) DESC;

SQL解决方案一

一般版本号排序,思路是去掉小数点,右边补零防止错误填写,类型转换为数字然后排序

select version ,concat(LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( version, ‘.‘, 1 ), ‘.‘, - 1 ), 3, ‘0‘ ),LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( version, ‘.‘, 2 ), ‘.‘, - 1 ), 3, ‘0‘ ),LPAD(CASE WHEN LENGTH(SUBSTRING_INDEX( version, ‘.‘, 3 ))=LENGTH(SUBSTRING_INDEX( version, ‘.‘, 2 ))THEN ‘000‘ELSE SUBSTRING_INDEX( SUBSTRING_INDEX( version, ‘.‘, 3 ), ‘.‘, - 1 ) END , 3, ‘0‘ ) ) as vvfrom lcp_app_versionorder by vv desc;

SQL解决方案二

以小数点分隔,取各个值,然后逐步按每个值排序

selectversion,SUBSTRING_INDEX(version,‘.‘,1) AS first_version,SUBSTRING_INDEX(SUBSTRING_INDEX(version,‘.‘,-2),‘.‘,1) AS second_version,SUBSTRING_INDEX(version,‘.‘,-1) AS third_versionFROMlcp_app_versionorder BY first_version+0 desc,second_version+0 desc,third_version+0 desc

后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!

•••展开全文