Pokusao sam da napravim funkciju za izracunavanje tacne razlike u datumima izrazene u mjesecima i godinama. Ulazni parametri su dva datuma i uslov na osnovu kojeg se odlucuje da li se racunaju datumi ili mjeseci. Napominjem da mi treba tacna razlika u mjesecima i danima, znaci ako je prestupna godina treba uzeti u obzir da februar ima 29 dana. Unaprijed hvala.
ALTER FUNCTION [PK].[test]
(
@datumOd datetime,
@datumDo datetime,
@broj tinyint
)
RETURNS tinyint
AS
BEGIN
declare @d tinyint;
declare @m tinyint;
declare @y tinyint;
declare @res tinyint;
declare @test bit;
set @m = 0;
SET @m = @m + 1;
set @test = 0;
set @datumOd = dateadd("Day",31,@datumOd);
while (@test = 0)
BEGIN
if ((datepart(month,@datumOd))in(1,3,5,7,8,10))
BEGIN
if (datediff(day,@datumOd,@datumDo)<31)
break;
else
BEGIN
select @datumOd = dateadd("Day",31,@datumOd);
set @m = @m + 1;
CONTINUE;
END
END
if (datepart(month,@datumOd)in(4,6,9,11))
BEGIN
if (datediff(day,@datumOd,@datumDo)<30)
break;
else
BEGIN
set @datumOd = dateadd("Day",30,@datumOd);
set @m = @m + 1;
CONTINUE;
END
END
if (datepart(month,@datumOd)=2 and year(@datumOd)%4=0)
BEGIN
if (datediff(day,@datumOd,@datumDo)<29)
break;
else
BEGIN
set @datumOd = dateadd("Day",29,@datumOd);
select @m = @m + 1;
CONTINUE;
END
END
if (datepart(month,@datumOd)=2 and year(@datumOd)%4>0)
BEGIN
if (datediff(day,@datumOd,@datumDo)<28)
break;
else
BEGIN
set @datumOd = dateadd("Day",28,@datumOd);
select @m = @m + 1;
CONTINUE;
END
END
END
set @d = datediff(day, @datumOd, @datumDo);
if (@broj = 1)
select @res = @m;
if (@broj = 2)
select @res = @d;
return @res;
END