gpt4 book ai didi

mysql - SQL查询查找下一个版本号

转载 作者:行者123 更新时间:2023-11-29 06:51:48 24 4
gpt4 key购买 nike

我在远程服务器上有一个表,用于存储我们客户端软件的版本号。我使用 SOAP 来处理请求。客户端软件发送一个版本号,我需要使用 SQL 来查找下一个版本号。

这是我使用的 SQL。我的大脑今天有点糟糕,我知道这是不正确的,但我似乎无法弄清楚我需要做什么。

建表代码:

CREATE TABLE IF NOT EXISTS `sqlUpdateVersions` (
`primary_key` int(11) NOT NULL AUTO_INCREMENT,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`comment` text NOT NULL,
`majorVS` tinyint(4) NOT NULL,
`minorVS` tinyint(4) NOT NULL,
`revisionVS` tinyint(4) NOT NULL,
`buildVS` tinyint(4) NOT NULL,
`filePK` int(11) NOT NULL,
`customDBJarPK` int(11) DEFAULT NULL,
PRIMARY KEY (`primary_key`),
KEY `filePK` (`filePK`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

这是查找版本号的 SQL 查询。我在这个版本中转储了 1.1.0.0

select b.majorVS, b.minorVS,b.revisionVS, b.buildVS
from sqlUpdateVersions b where
b.majorVS>=1 AND b.minorVS >=1 AND b.revisionVS>=0 AND b.buildVS>=10
ORDER BY b.majorVS,b.minorVS,b.revisionVS, b.buildVS

现在我可以清楚地知道这个 SQL 是有问题的。但是我将如何构建一个返回下一个值的结构,比如 1.2.0.0 或 1.1.1.0

谢谢。

最佳答案

这是一种蛮力方法:

select suv.*
from sqlUpdateVersions suv
where suv.majorVS > 1 or
(suv.MajorVs = 1 and suv.minorVS > 1) or
(suv.MajorVS = 1 and suv.minorVS = 1 and suv.revisionVS > 0) or
(suv.MajorVS = 1 and suv.minorVS = 1 and suv.revisionVS = 0 and suv.buildVS > 10)
order by suv.MajorVS, suv.MinorVS, suv.revisionVS, suv.buildVS

您还可以将版本转换为 bigint 并直接进行比较:

select suv.*
from (select suv.*,
buildVS + (cast(1000 as bigint)*revisionVS +
(cast(1000 as bigint)*minorVS +
(cast(1000 as bigint)*majorVS
)
)
) as bigVersion
from sqlUpdateVersions suv
) suv
where bigversion > 1001000010

关于mysql - SQL查询查找下一个版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14898857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com