Funkcija ti je sasvim OK ali sam je ipak prepravio. Dao si mi ideju kako da to uradim. Kad sam je testirao cini mi se da nesto nije bilo u redu sa prestupnim godinama.
Code:
CREATE FUNCTION [PK].[periodGMD] (@datumOd datetime , @datumDo datetime)
RETURNS @rez TABLE (god tinyint ,mes tinyint ,dan tinyint )
AS
begin
declare @G tinyint;
declare @M tinyint;
declare @D tinyint;
declare @tempM int;
declare @tempD tinyint;
declare @tempDate datetime;
IF DATEPART(month,@DatumOd) = DATEPART(month,@DatumDo) AND DATEPART(year,@DatumOd) = DATEPART(year,@DatumDo)
BEGIN
SET @G = 0
IF DATEPART(month,@DatumOd) <> DATEPART(month,DATEADD(dd,-1,@DatumOd)) AND DATEPART(month,@DatumDo)<> DATEPART(month,DATEADD(dd,1,@DatumDo))
BEGIN
SET @M = 1
SET @D = 0
END
ELSE
BEGIN
SET @M = 0
SET @D = DATEDIFF(day,@DatumOd,@DatumDo) + 1
END
END
ELSE
BEGIN
SET @G = 0;
SET @tempD = 0;
IF DATEPART(dd,@datumOd) = DATEPART(dd,@datumDo) + 1
BEGIN
SET @tempM = DATEDIFF(mm,@datumOd,@datumDo);
SET @M = @tempM%12;
SET @D = 0;
SET @G = @tempM/12;
INSERT INTO @rez (god, mes, dan)
VALUES(@G, @M, @D)
RETURN
END
IF DATEPART(dd,@datumOd) = DATEPART(dd,@datumDo)
BEGIN
SET @tempM = DATEDIFF(mm,@datumOd,@datumDo);
SET @M = @tempM%12;
SET @D = 1;
SET @G = @tempM/12;
INSERT INTO @rez (god, mes, dan)
VALUES(@G, @M, @D)
RETURN
END
IF DATEPART(day,@datumOd) > DATEPART(day,@datumDo)--dan u datumOd veci od dan u datumDo
BEGIN
SET @tempDate = @datumOd;
SET @tempD = datediff(dd,@datumOd,convert(datetime,('01.' + convert(char,(month(@datumOd)+1),2) + '.' + convert(char,year(@datumOd),4))));
SET @tempM = DATEDIFF(mm,@tempDate,@datumDo) - 1;
SET @tempDate = DATEADD(dd,@tempD,@tempDate);
SET @tempDate = DATEADD(mm,@tempM,@tempDate);
SET @G = @tempM/12;
SET @M = @tempM%12;
SET @D = DATEDIFF(dd,@tempDate,@datumDo) + @tempD + 1;
INSERT INTO @rez (god, mes, dan)
VALUES(@G, @M, @D)
RETURN
END
IF DATEPART(day,@datumOd) < DATEPART(day,@datumDo)--dan u datumOd manji od dan u datumDo
BEGIN
SET @tempM = DATEDIFF(month,@datumOd,@datumDo);
SET @M = @tempM%12;
SET @G = @tempM/12;
SET @datumOd = DATEADD(mm,DATEDIFF(month,@datumOd,@datumDo),@datumOd);
SET @D = DATEDIFF(dd,@datumOD,@datumDo) + 1;
END
END
INSERT INTO @rez (god, mes, dan)
VALUES(@G, @M, @D)
RETURN
END
Edit: Dodat je code tag
[Ovu poruku je menjao chachka dana 04.06.2008. u 09:47 GMT+1]