MySQL版本号字段
1、版本号规则
# 以 . 分段,每段为0或大于0的数字 # 1.0.20 # 1.23.456.7890
2、正则
# 最后的{2}表示只能 3 段,即:x.y.z;{3}时则表示只能 4 段。 ^((0)|([1-9][\d]*))((\.0)|(\.([1-9][\d]*))){2}$
3、SQL
# 示例,版本号:1.23.456 # 说明:版本号位数固定 ## 将版本号分段截取,每段填充固定位数,合并填充后的字符串后比较 ### SUBSTRING_INDEX(字段, 分割符,位数) ### SUBSTRING_INDEX('1.23.456', '.', 1),从左侧开始截取一位,值=1 ### SUBSTRING_INDEX('1.23.456', '.', 2),从左侧开始截取两位,值=1.23 ### SUBSTRING_INDEX('1.23.456', '.', -1),从右侧开始截取一位,值=456 ### SUBSTRING_INDEX('1.23.456', '.', -2),从右侧开始截取两位,值=23.456 ## 将每段左侧用同一值填充,以 0 示例 ### LPAD(SUBSTRING_INDEX('1.23.456', '.', 1), 5,'0'),将第1段填充为5位的字符串,值=00001 ### LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX('1.23.456', '.', 2), '.', -1) , 5,'0'),将第2段填充为5位的字符串,值=00023 ### LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX('1.23.456', '.', 3), '.', -1) , 5,'0'),将第2段填充为5位的字符串,值=00456
SELECT `version`, SUBSTRING_INDEX(`version`, '.', 1) AS a, SUBSTRING_INDEX(SUBSTRING_INDEX(`version`, '.', 2), '.', -1) AS b, SUBSTRING_INDEX(SUBSTRING_INDEX(`version`, '.', 3), '.', -1) AS c, LPAD(SUBSTRING_INDEX(`version`, '.', 1), 5,'0') AS d, LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(`version`, '.', 2), '.', -1), 5, '0') AS e, LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(`version`, '.', 3), '.', -1), 5, '0') AS f, CONCAT( LPAD(SUBSTRING_INDEX(`version`, '.', 1), 5,'0'), LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(`version`, '.', 2), '.', -1), 5, '0'), LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(`version`, '.', 3), '.', -1), 5, '0') ) AS g FROM `version` v HAVING g > '000010002300456' ORDER BY g DESC;