我想要切片的substr,因为我有一个包含应用程序名称及其版本的数据库。
我希望得到每个需要遵循的版本。 (每个分支的每个最后版本)。
这些版本名称可以格式化为8.XX.YY.ZZZZ。并且我想获得第一组数字的最后一个版本。
例如:
我只会得到:
我一直在想一个可以这样做的程序:
获取最高版本(此处为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))
我希望有可能。
答案 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