UFN_CALENDARDATES
Returns a table of dates with a given range
Return
Return Type |
---|
table |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@FIRSTDATE | date | IN | |
@LASTDATE | date | IN | |
@INTERVALTYPE | tinyint | IN |
Definition
Copy
CREATE function [dbo].[UFN_CALENDARDATES]
(
@FIRSTDATE date,
@LASTDATE date,
@INTERVALTYPE tinyint
)
returns @DATETABLE table (
[DATE] date,
[INTERVAL] integer
)
as
begin
if @FIRSTDATE <= @LASTDATE
begin
with DATESTABLE
as
(
select @FIRSTDATE as [DATE], 1 INTERVAL
union all
select
case
when @INTERVALTYPE=1 then
dateadd(dd, INTERVAL, @FIRSTDATE)
when @INTERVALTYPE=2 then
dateadd(ww, INTERVAL, @FIRSTDATE)
when @INTERVALTYPE=3 then
dateadd(mm, INTERVAL, @FIRSTDATE)
when @INTERVALTYPE=4 then
dateadd(yy, INTERVAL, @FIRSTDATE)
else
dateadd(dd, INTERVAL, @FIRSTDATE)
end,
INTERVAL + 1 [INTERVAL]
from DATESTABLE
where
(
case
when @INTERVALTYPE=1 then
dateadd(dd, INTERVAL, @FIRSTDATE)
when @INTERVALTYPE=2 then
dateadd(ww, INTERVAL, @FIRSTDATE)
when @INTERVALTYPE=3 then
dateadd(mm, INTERVAL, @FIRSTDATE)
when @INTERVALTYPE=4 then
dateadd(yy, INTERVAL, @FIRSTDATE)
else
dateadd(dd, INTERVAL, @FIRSTDATE)
end) <= @LASTDATE
)
insert into @datetable ([DATE], [INTERVAL])
select [DATE], [INTERVAL] from DATESTABLE
option (maxrecursion 0);
end
return;
end