USP_RESOLVESHOWDATEFILTER

Parameters

Parameter Parameter Type Mode Description
@SHOWCODE smallint IN
@STARTDATE datetimeoffset INOUT
@ENDDATE datetimeoffset INOUT
@STARTTIME char(4) IN
@ENDTIME char(4) IN
@REFERENCEDATE datetimeoffset IN

Definition

Copy


create procedure dbo.USP_RESOLVESHOWDATEFILTER
(            
    @SHOWCODE smallint = 0,
    @STARTDATE datetimeoffset = null output,
    @ENDDATE datetimeoffset = null output,
    @STARTTIME char(4) = null,
    @ENDTIME char(4) = null,
    @REFERENCEDATE datetimeoffset = null
)
as

set nocount on;

declare @currentDate datetimeoffset(3);
if @REFERENCEDATE is not null
    set @currentDate = switchoffset(@REFERENCEDATE, 0);
else
    set @currentDate = switchoffset(sysdatetimeoffset(), 0);

if @SHOWCODE = 0 -- All

    begin
        set @STARTDATE = null;
        set @ENDDATE = null;
    end

else if @SHOWCODE = 1 -- Today

    begin
        set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(@currentDate);
        set @ENDDATE = dbo.UFN_DATETIMEOFFSET_GETLATESTTIME(@currentDate);        
    end

else if @SHOWCODE in (2, 3, 4, 5, 6, 7, 8, 9
    begin
        set @ENDDATE = dbo.UFN_DATETIMEOFFSET_GETLATESTTIME(@currentDate);

        if @SHOWCODE = 2        -- 24h

            set @STARTDATE = dateadd(hour, -24, @currentDate);
        else if @SHOWCODE = 3   -- 48h

            set @STARTDATE = dateadd(hour, -48, @currentDate);
        else if @SHOWCODE = 4   -- 1w

            set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(dateadd(day, -6, @currentDate));
        else if @SHOWCODE = 5   -- 2w

            set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(dateadd(day, -13, @currentDate));
        else if @SHOWCODE = 6   -- 1m

            set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(dateadd(day, -29, @currentDate));
        else if @SHOWCODE = 7   -- 3m

            set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(dateadd(day, -89, @currentDate));
        else if @SHOWCODE = 8   -- 6m

            set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(dateadd(day, -179, @currentDate));
        else if @SHOWCODE = 9   -- 1y

            set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(dateadd(day, -364, @currentDate));
    end

else if @SHOWCODE = 99 -- Custom

    begin
        set @STARTDATE = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(@STARTDATE, 0)
        set @ENDDATE = dbo.UFN_TIMEZONEENTRY_GETSYSTEMDEFAULTDATEWITHTIMEOFFSET(@ENDDATE, 0);
        set @STARTTIME = nullif(@STARTTIME, '');
        set @ENDTIME = nullif(@ENDTIME, '');

        if @STARTDATE is not null
            begin
                set @STARTDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(@STARTDATE);
                if @STARTTIME is not null
                    begin
                        set @STARTDATE = dateadd(hh, cast(substring(@STARTTIME, 1, 2) as int), @STARTDATE);
                        set @STARTDATE = dateadd(mi, cast(substring(@STARTTIME, 3, 2) as int), @STARTDATE);                        
                    end
            end

        if @ENDDATE is not null
            begin
                if @ENDTIME is null
                    set @ENDDATE = dbo.UFN_DATETIMEOFFSET_GETLATESTTIME(@ENDDATE);

                else
                    begin
                        set @ENDDATE = dbo.UFN_DATETIMEOFFSET_GETEARLIESTTIME(@ENDDATE);            
                        set @ENDDATE = dateadd(hh, cast(substring(@ENDTIME, 1, 2) as int), @ENDDATE);
                        set @ENDDATE = dateadd(mi, cast(substring(@ENDTIME, 3, 2) as int), @ENDDATE);
                        set @ENDDATE = dateadd(s, 59, @ENDDATE);

                        -- Push the end date to the latest valid SQL Server millisecond.

                        set @ENDDATE = dateadd(ms, 997, @ENDDATE);
                    end
            end

    end

return 0;