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

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你认识小汐吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值