sql2008 一個表里存了程式的版本號和EXE檔案,想通過對比版本號來更新,記錄有幾條,從1.0.0.5至1.0.0.12,但我用 select max(FileVersion) from table_soft 取出的版本號是 1.0.0.9,而不是1.0.0.12,我不想用去掉點的方法,怎么解決?
uj5u.com熱心網友回復:
建立個split函式,然后行轉列,然后按列排序CREATE FUNCTION [dbo].[SplitStr]
(
@string nvarchar(max),
@symbol nvarchar(10)
)
RETURNS @table TABLE(id int identity,value nvarchar(max))
AS
begin
DECLARE @splitlen int
SET @splitlen=LEN(@symbol)-1
WHILE CHARINDEX(@symbol,@string)>0
BEGIN
INSERT @table(value) VALUES(LEFT(@string,CHARINDEX(@symbol,@string)-1))
SET @string=STUFF(@string,1,CHARINDEX(@symbol,@string)+@splitlen,'')
END
INSERT @table(value) VALUES(@string)
return
end
declare @tb table(ver nvarchar(20))
insert into @tb values('1.0.0.5'),('1.0.0.6'),('1.0.0.8'),('1.0.0.9'),('1.0.0.10'),('1.0.0.12')
select *
from @tb
cross apply (
select convert(int,[1]) as v1,convert(int,[2]) as v2,convert(int,[3]) as v3,convert(int,[4]) as v4
from (
select * from master.dbo.splitStr(ver,'.')
) a
pivot(max(value) for id in ([1],[2],[3],[4])) p
) b
order by v1 desc,v2 desc,v3 desc,v4 desc
(6 行受影響)
ver v1 v2 v3 v4
-------------------- ----------- ----------- ----------- -----------
1.0.0.12 1 0 0 12
1.0.0.10 1 0 0 10
1.0.0.9 1 0 0 9
1.0.0.8 1 0 0 8
1.0.0.6 1 0 0 6
1.0.0.5 1 0 0 5
(6 行受影響)
uj5u.com熱心網友回復:
轉成ascii看看能不能比較uj5u.com熱心網友回復:
PARSENAME拆分uj5u.com熱心網友回復:
parsename 你學習一下吧1 .把這些都分解后,然后存于臨時表
2. 臨時表中依次對每列進行比較得出最大值(當然也可以讓列(第一列*10000+第二列*1000+第三列*100+第四列*10+第五列)相加,然后得到一個最大值就是最大版本號)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/99111.html
標籤:基礎類
下一篇:小小問題,請大神們解答
