Mysql提取字符串的一部分(substr,slice?)

时间:2017-05-30 13:35:42

标签: mysql substring slice

我想要切片的substr,因为我有一个包含应用程序名称及其版本的数据库。

我希望得到每个需要遵循的版本。 (每个分支的每个最后版本)。

这些版本名称可以格式化为8.XX.YY.ZZZZ。并且我想获得第一组数字的最后一个版本。

例如:

  • 800000018
  • 800000024
  • 800010000
  • 800010009
  • 800020001
  • 800020005
  • 801000004
  • 801000005
  • 800020006
  • 800020007
  • 800010010
  • 800020009

我只会得到:

  • 801000005(8.1.0.5)
  • 800020009(8.0.2.9)
  • 800010010(8.0.1.10)
  • 800000024(8.0.0.24)

我一直在想一个可以这样做的程序:

获取最高版本(此处为8.1.0.5)。

然后,获得最大版本但是如果XX> 1则减去1; 1(8(XX -1)) 再次,如果YY> 1(800(YY-1)),获取最大版本并减去1 继续,直到只剩下最后4个数字,第一个数字不是0。

在SQL中,它看起来像这样:

select max(version_name) from application;

while (XX >0) SET XX=XX-1;
select max(version_name) from application where version_name LIKE '8XX';

while (YY>0) SET YY=YY-1;
select max(version_name) from application where version_name LIKE '800YY';

End there and last version_name should be  = 80000ZZZZ.

如果可能的话,是否有一种方法可以从字符串的末尾开始。

我在JS中有一个过滤器,如果它可以提供帮助,它会以我想要的格式(VV.XX.YY.ZZZZ)进行转换:

 parseInt(version.slice(0, -8)), parseInt(version.substr(-8, 2)),
 parseInt(version.substr(-6, 2)), parseInt(version.slice(-4))

我希望有可能。

2 个答案:

答案 0 :(得分:0)

你可以按子串分组并获得最大值

select max(version_name)
from application
group by 
substring(version_name,1,1),
substring(version_name,2,2),
substring(version_name,4,2)

并按照您的意愿订购/解析

答案 1 :(得分:0)

我在MYSQL中的查询

SELECT
    CONCAT_WS(
        '.',
        SUBSTRING(VERSION, -9, 1),
        SUBSTRING(VERSION, -8, 2) +0,
        SUBSTRING(VERSION, -6, 2) +0,
        SUBSTRING(VERSION, -4, 4) +0
    ) AS result,
    VERSION
FROM
    `test`

输出:

result    version
--------------------
8.0.0.18  800000018
8.0.2.9   800020009
8.0.1.10  800010010
8.1.0.5   801000005