当试图比较软件版本5.12到5.8时,版本5.12是较新的,但是数学上5.12小于5.8.如何比较两个版本,以便较新版本返回“Y”?
SELECT CASE WHEN 5.12 > 5.8 THEN 'Y' ELSE 'N' END
可能的解决方案
>在5.8中添加小数点后的0,以便比较5.08到5.12,但是这似乎需要一些代码.
>简单地比较十进制后的值(即12> 8),但是当版本滚动到6.0时失败.
>使用反向逻辑,假设如果5.12小于5.8返回“Y”.我相信当版本升级到6.0时,会失败.
解决方法
declare @v1 varchar(100) = '5.12' declare @v2 varchar(100) = '5.8' select case when CONVERT(int,LEFT(@v1,CHARINDEX('.',@v1)-1)) < CONVERT(int,LEFT(@v2,@v2)-1)) then 'v2 is newer' when CONVERT(int,@v1)-1)) > CONVERT(int,@v2)-1)) then 'v1 is newer' when CONVERT(int,substring(@v1,@v1)+1,LEN(@v1))) < CONVERT(int,substring(@v2,@v2)+1,LEN(@v1))) then 'v2 is newer' when CONVERT(int,LEN(@v1))) > CONVERT(int,LEN(@v1))) then 'v1 is newer' else 'same!' end