mysql版本号xx.xx.xx类型字段排序问题解决

        项目开发中mysql有版本号字段,类似于1.0.0,1.0.1这种,需求是按照版本号倒序排列。直接使用字段排会根据字符串进行排序,这样1.10.1和1.2.1进行排序,本来想让1.10.1排在前面,但是字符串排序2比1大,1.2.1就排在了前面,不是我们想要的结果。想到把version版本号拆分成三个字段,分别排序。这里用到了mysqlSUBSTRING_INDEX.

substring_index

substring_index(str,delim,count)

      str:要处理的字符串

      delim:分隔符

      count:计数

例子:str=1.2.3

substring_index(str,'.',1)  ===> 结果是:1

substring_index(str,'.',2)  ===> 结果是:1.2

        也就是说,如果count是正数,那么就是从左往右数,第N个分隔符的左边的全部内容。相反,如果是负数,那么就是从右边开始数,第N个分隔符右边的所有内容,如:

substring_index(str,'.',-2) ===> 结果是:2.3

如果我要中间的2怎么办?取两个方向,先从右边取两个,得到2.3,再拆分从左边取一个,得到2

substring_index(substring_index(str,'.',-2),'.',1)  ===> 结果是:2

贴一下代码:

 注意:后面排序+0是因为截取出来的字符串还是字符串,排序的时候2会在10前面,通过+0可以转换成数字进行排序。

SELECT
	*,
SUBSTRING_INDEX(version,'.',1) AS first_version,
SUBSTRING_INDEX(SUBSTRING_INDEX(version,'.',-2),'.',1) AS second_version,
SUBSTRING_INDEX(version,'.',-1) AS third_version
FROM
	release
WHERE
	id = #{id}
order BY first_version+0 desc,
second_version+0 desc,
third_version+0 desc,
create_time desc

 

 

你可能感兴趣的:(Mysql)