mysql字符串类型比较问题—app版本号

背景

mysql版本号字段类型是varchar,app版本号规则如下:

  • 7.1.1
  • 7.1
  • 7.0.10
  • 7.0.10
  • 7.0.1
  • 7.0
  • 6.9.5

产生的问题是:筛选出<7.9.10版本号,7.9.9,7.9.8等等就不在范围之内

问题解决

原理:取每组版本号并向前补0至N位(例子中补10位)

  • X.XX.XXX > 7.9.12
  • ‘000000000X00000000XX0000000XXX’ > ‘000000000700000000090000000012’
1
2
3
4
5
6
7
8
9
10
SELECT
*
FROM
table
WHERE
CONCAT(
LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( version, '.', 1 ), '.', - 1 ), 10, '0' ),
LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( version, '.', 2 ), '.', - 1 ), 10, '0' ),
LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( version, '.', 3 ), '.', - 1 ), 10, '0' )
) > CONCAT( LPAD( 7, 10, '0' ), LPAD( 9, 10, '0' ), LPAD( 12, 10, '0' ) );