mysql去掉小数点多余0_mysql数据库个性化需求:版本号排序
生活随笔
收集整理的這篇文章主要介紹了
mysql去掉小数点多余0_mysql数据库个性化需求:版本号排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
今天主要介紹一個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_version order 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方面內容,感興趣的朋友可以關注下!
總結
以上是生活随笔為你收集整理的mysql去掉小数点多余0_mysql数据库个性化需求:版本号排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2011工作总结
- 下一篇: 滤波器开发之三:基于算数平均的阶进平滑滤