UFN_VOLUNTEER_DAYOFWEEKMATCHES_VALID
Return
Return Type |
---|
bit |
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SINGLEDAY | datetime | IN | |
@OCCURRENCETYPE | tinyint | IN | |
@STARTDATETIME | datetime | IN | |
@STARTMONTHDAY | UDT_MONTHDAY | IN | |
@ENDDATETIME | datetime | IN | |
@ENDMONTHDAY | UDT_MONTHDAY | IN | |
@DAYOFWEEKCODE | tinyint | IN |
Definition
Copy
CREATE function dbo.UFN_VOLUNTEER_DAYOFWEEKMATCHES_VALID
(
@SINGLEDAY datetime,
@OCCURRENCETYPE tinyint,
@STARTDATETIME datetime,
@STARTMONTHDAY dbo.UDT_MONTHDAY,
@ENDDATETIME datetime,
@ENDMONTHDAY dbo.UDT_MONTHDAY,
@DAYOFWEEKCODE tinyint
)
returns bit
with execute as caller
as begin
declare @MONTH as int;
declare @DAY as int;
declare @VALID as bit = 0
if @SINGLEDAY is null
return 0;
else
begin
if @OCCURRENCETYPE = 2 --ongoing
set @VALID = 1;
if @OCCURRENCETYPE = 0 --onetime
if @SINGLEDAY between @STARTDATETIME and @ENDDATETIME
set @VALID = 1;
if @OCCURRENCETYPE = 1 --recurring
begin
set @MONTH = month(@SINGLEDAY);
set @DAY = day(@SINGLEDAY);
if @STARTMONTHDAY <= @ENDMONTHDAY
begin
if (@MONTH > left(@STARTMONTHDAY,2)
or (@MONTH = left(@STARTMONTHDAY,2) and @DAY>= right(@STARTMONTHDAY,2)))
and
(@MONTH < left(@ENDMONTHDAY,2)
or (@MONTH = left(@ENDMONTHDAY,2) and @DAY<= right(@ENDMONTHDAY,2)))
set @VALID = 1
end
else
begin
if (@MONTH > left(@STARTMONTHDAY,2)
or (@MONTH = left(@STARTMONTHDAY,2) and @DAY>= right(@STARTMONTHDAY,2)))
or (@MONTH < left(@ENDMONTHDAY,2)
or (@MONTH = left(@ENDMONTHDAY,2) and @DAY<= right(@ENDMONTHDAY,2)))
set @VALID = 1
end
end
-- Done with first set of checks... now check day of week matches.
if @VALID = 0
return 0;
declare @DATEDAYOFWEEK tinyint;
if @DAYOFWEEKCODE = 0 --everyday
return 1;
set @DATEDAYOFWEEK = datepart(dw, @SINGLEDAY);
if (@DAYOFWEEKCODE >= 1 and @DAYOFWEEKCODE <= 7) --actual day
if (@DATEDAYOFWEEK = @DAYOFWEEKCODE)
return 1;
else
return 0;
if @DAYOFWEEKCODE = 8 -- weekends
if (@DATEDAYOFWEEK = 1 or @DATEDAYOFWEEK = 7)
return 1;
else
return 0;
if @DAYOFWEEKCODE = 9 -- weekdays
if (@DATEDAYOFWEEK >= 2 and @DATEDAYOFWEEK <= 6)
return 1;
else
return 0;
end
return 0;
end