所以基本上自从这个自定义日期数学,你需要实现自己的函数来获得所需的结果。
查看下面的 TSQL
CREATE FUNCTION dbo.getDateSum(@d1 varchar(100), @d2 varchar(100))
RETURNS varchar(100)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @y int, @m int, @d int
Select
@d1= REPLACE(REPLACE(REPLACE(@d1,' years, ', '-'),' months, ','-'),' days',''),
@d2= REPLACE(REPLACE(REPLACE(@d2,' years, ', '-'),' months, ','-'),' days','')
Select
@y= CAST(LEFT(@d1,CHARINDEX('-',@d1)-1) AS INT)+CAST(LEFT(@d2,CHARINDEX('-',@d2)-1) AS INT),
@m= CAST(SUBSTRING(@d1,CHARINDEX('-',@d1)+1,LEN(@d1)-CHARINDEX('-',REVERSE(@d1))-CHARINDEX('-',@d1))AS INT)+CAST(SUBSTRING(@d2,CHARINDEX('-',@d2)+1,LEN(@d2)-CHARINDEX('-',REVERSE(@d2))-CHARINDEX('-',@d2)) AS INT),
@d= CAST(LEFT(REVERSE(@d1),CHARINDEX('-',REVERSE(@d1))-1)AS INT)+CAST(LEFT(REVERSE(@d2),CHARINDEX('-',REVERSE(@d2))-1) AS INT)
IF(@d>30)
BEGIN
SET @d=@d%30
SET @m=@m+CAST(@d/30 as INT)
END
IF(@m>30)
BEGIN
SET @m=@m%12
SET @y=@y+CAST(@m/12 as INT)
END
RETURN (cast(@y as varchar)+ ' years, ' + cast(@m as varchar) +' months, '+ cast(@d as varchar) + ' days' );
END
go
CREATE FUNCTION dbo.getDateDiff(@df date, @dt date)
RETURNS varchar(100)
WITH EXECUTE AS CALLER
AS
BEGIN
declare @y int, @m int, @d int
Select @y= YEAR(@dt)- YEAR(@df),@m= MONTH(@dt)- MONTH(@df),@d=CASE WHEN DAY(@df)=1 THEN DAY(@dt)- DAY(@df)+1 ELSE DAY(@dt)- DAY(@df) -1 END
If (@d<0)
BEGIN
Set @m=@m-1
set @d=@d + DATEDIFF(d, @dt, EOMONTH(@dt))
END
IF(@m<0)
BEGIN
Set @y=@y-1
Set @m=@m+ 12
END
RETURN (cast(@y as varchar)+ ' years, ' + cast(@m as varchar) +' months, '+ cast(@d as varchar) + ' days' )
END
go
SELECT dbo.getDateSum(dbo.getDateDiff('2010-02-01','2011-03-11'),dbo.getDateDiff('2010-02-02', '2011-03-11'))
go