@@ -12,60 +12,60 @@ RETURNS @Return table (
1212)
1313AS
1414BEGIN ;
15- SELECT @SeedDate = COALESCE(@SeedDate, GETDATE());
15+ SELECT @SeedDate = COALESCE(@SeedDate, GETDATE());
1616
1717 WITH cte_Dates AS (
18- SELECT DiffYY = DATEDIFF(yy , 0 , @SeedDate)
19- , DiffMM = DATEDIFF(mm , 0 , @SeedDate)
20- , DiffWK = DATEDIFF(wk , 0 , @SeedDate)
21- , DiffDD = DATEDIFF(dd , 0 , @SeedDate)
22- , DiffQQ = DATEDIFF(qq , 0 , @SeedDate)
18+ SELECT DiffDD = DATEDIFF(DAY , 0 , @SeedDate)
19+ , DiffWK = DATEDIFF(WEEK , 0 , @SeedDate)
20+ , DiffMM = DATEDIFF(MONTH , 0 , @SeedDate)
21+ , DiffQQ = DATEDIFF(QUARTER , 0 , @SeedDate)
22+ , DiffYY = DATEDIFF(YEAR , 0 , @SeedDate)
2323 )
2424 INSERT INTO @Return (Code, [Label], BeginDate, EndDateInclusiveDT, EndDateInclusiveDT2, EndDateExclusive)
25- SELECT Code = x .Code
26- , [Label] = CONVERT (varchar (100 ), x.[Period])
27- , BeginDate = CONVERT (datetime2, x .BeginDate )
28- , EndDateInclusiveDT = DATEADD(MILLISECOND, - 3 , DATEADD(DAY, 1 , CONVERT (datetime , x .EndDate )))
29- , EndDateInclusiveDT2 = DATEADD(NANOSECOND, - 100 , DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))) -- +1 day -1 tick
30- , EndDateExclusive = DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))
25+ SELECT Code = x .Code
26+ , [Label] = CONVERT (varchar (100 ), x.[Period])
27+ , BeginDate = CONVERT (datetime2, x .BeginDate )
28+ , EndDateInclusiveDT = DATEADD(MILLISECOND, - 3 , DATEADD(DAY, 1 , CONVERT (datetime , x .EndDate )))
29+ , EndDateInclusiveDT2 = DATEADD(NANOSECOND, - 100 , DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))) -- +1 day -1 tick
30+ , EndDateExclusive = DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))
3131 FROM cte_Dates t
3232 CROSS APPLY (
33- VALUES (' CD' , ' Current Day' , @SeedDate , @SeedDate )
34- , (' CM' , ' Current Month' , DATEADD(mm , t .DiffMM , 0 ) , DATEADD(dd, - 1 , DATEADD(mm , t .DiffMM + 1 , 0 )) )
35- , (' CMTD' , ' Current Month To Date' , DATEADD(mm , t .DiffMM , 0 ) , @SeedDate )
36- , (' CQ' , ' Current Quarter' , DATEADD(qq , t .DiffQQ , 0 ) , DATEADD(dd, - 1 , DATEADD(qq , t .DiffQQ + 1 , 0 )) )
37- , (' CQTD' , ' Current Quarter to Date' , DATEADD(qq , t .DiffQQ , 0 ) , @SeedDate )
38- , (' CY' , ' Current Year' , DATEADD(yy , t .DiffYY , 0 ) , DATEADD(dd, - 1 , DATEADD(yy , t .DiffYY + 1 , 0 )) )
39- , (' CYTD' , ' Current Year To Date' , DATEADD(yy , t .DiffYY , 0 ) , @SeedDate )
33+ VALUES (' CD' , ' Current Day' , @SeedDate , @SeedDate )
34+ , (' CM' , ' Current Month' , DATEADD(MONTH , t .DiffMM , 0 ) , DATEADD(DAY , - 1 , DATEADD(MONTH , t .DiffMM + 1 , 0 )) )
35+ , (' CMTD' , ' Current Month To Date' , DATEADD(MONTH , t .DiffMM , 0 ) , @SeedDate )
36+ , (' CQ' , ' Current Quarter' , DATEADD(QUARTER , t .DiffQQ , 0 ) , DATEADD(DAY , - 1 , DATEADD(QUARTER , t .DiffQQ + 1 , 0 )) )
37+ , (' CQTD' , ' Current Quarter to Date' , DATEADD(QUARTER , t .DiffQQ , 0 ) , @SeedDate )
38+ , (' CY' , ' Current Year' , DATEADD(YEAR , t .DiffYY , 0 ) , DATEADD(DAY , - 1 , DATEADD(YEAR , t .DiffYY + 1 , 0 )) )
39+ , (' CYTD' , ' Current Year To Date' , DATEADD(YEAR , t .DiffYY , 0 ) , @SeedDate )
4040
41- , (' PD' , ' Previous Day' , DATEADD(dd, - 1 , @SeedDate ) , DATEADD(dd, - 1 , @SeedDate) )
42- -- , ('PW' , 'Previous Week' , DATEADD(wk, y .DiffWK - 1, 0) , DATEADD(dd , -1, DATEADD(wk, y .DiffWK, 0)) ) -- Removed temporarily - for some reason defaults to Monday as first day of week, despite DATEFIRST setting
43- , (' PM' , ' Previous Month' , DATEADD(mm , t .DiffMM - 1 , 0 ) , DATEADD(dd , - 1 , DATEADD(mm , t .DiffMM , 0 )) )
44- , (' PMTD' , ' Previous Month to Date' , DATEADD(mm , t .DiffMM - 1 , 0 ) , DATEADD(mm , - 1 , @SeedDate) )
45- , (' PQ' , ' Previous Quarter' , DATEADD(qq , t .DiffQQ - 1 , 0 ) , DATEADD(dd , - 1 , DATEADD(qq , t .DiffQQ , 0 )) )
46- , (' PQTD' , ' Previous Quarter to Date' , DATEADD(qq , t .DiffQQ - 1 , 0 ) , DATEADD(qq , - 1 , @SeedDate) )
47- , (' PYQ' , ' Previous Year Quarter' , DATEADD(qq , t .DiffQQ - 4 , 0 ) , DATEADD(dd , - 1 , DATEADD(qq , t .DiffQQ - 3 , 0 )) )
48- , (' PYQTD' , ' Previous Year Quarter to Date' , DATEADD(qq , t .DiffQQ - 4 , 0 ) , DATEADD(yy , - 1 , @SeedDate) )
49- , (' PY' , ' Previous Year' , DATEADD(yy , t .DiffYY - 1 , 0 ) , DATEADD(dd , - 1 , DATEADD(yy , t .DiffYY , 0 )) )
50- , (' PYTD' , ' Previous Year to Date' , DATEADD(yy , t .DiffYY - 1 , 0 ) , DATEADD(yy , - 1 , @SeedDate) )
41+ , (' PD' , ' Previous Day' , DATEADD(DAY , t . DiffDD - 1 , 0 ) , DATEADD(DAY , - 1 , @SeedDate) )
42+ -- , ('PW' , 'Previous Week' , DATEADD(WEEK , t .DiffWK - 1, 0) , DATEADD(DAY , -1, DATEADD(WEEK , t .DiffWK , 0)) ) -- Removed temporarily - for some reason defaults to Monday as first day of week, despite DATEFIRST setting
43+ , (' PM' , ' Previous Month' , DATEADD(MONTH , t .DiffMM - 1 , 0 ) , DATEADD(DAY , - 1 , DATEADD(MONTH , t .DiffMM , 0 )) )
44+ , (' PMTD' , ' Previous Month to Date' , DATEADD(MONTH , t .DiffMM - 1 , 0 ) , DATEADD(MONTH , - 1 , @SeedDate) )
45+ , (' PQ' , ' Previous Quarter' , DATEADD(QUARTER , t .DiffQQ - 1 , 0 ) , DATEADD(DAY , - 1 , DATEADD(QUARTER , t .DiffQQ , 0 )) )
46+ , (' PQTD' , ' Previous Quarter to Date' , DATEADD(QUARTER , t .DiffQQ - 1 , 0 ) , DATEADD(QUARTER , - 1 , @SeedDate) )
47+ , (' PYQ' , ' Previous Year Quarter' , DATEADD(QUARTER , t .DiffQQ - 4 , 0 ) , DATEADD(DAY , - 1 , DATEADD(QUARTER , t .DiffQQ - 3 , 0 )) )
48+ , (' PYQTD' , ' Previous Year Quarter to Date' , DATEADD(QUARTER , t .DiffQQ - 4 , 0 ) , DATEADD(YEAR , - 1 , @SeedDate) )
49+ , (' PY' , ' Previous Year' , DATEADD(YEAR , t .DiffYY - 1 , 0 ) , DATEADD(DAY , - 1 , DATEADD(YEAR , t .DiffYY , 0 )) )
50+ , (' PYTD' , ' Previous Year to Date' , DATEADD(YEAR , t .DiffYY - 1 , 0 ) , DATEADD(YEAR , - 1 , @SeedDate) )
5151 ) x(Code, [Period], BeginDate, EndDate)
5252 WHERE x .Code = @DateCode OR @DateCode IS NULL
5353 UNION
5454 -- Handling for P7D and L7D style date codes
5555 -- Supporting only days for now. Months requires a bit more work to calcualte the end of month value.
56- SELECT Code = UPPER (@DateCode)
57- , [Label] = CONCAT_WS(' ' , CASE LEFT(@DateCode, 1 ) WHEN ' L' THEN ' Last' WHEN ' P' THEN ' Previous' ELSE NULL END, t.[Value], ' days' )
58- , BeginDate = CONVERT (datetime2, x .BeginDate )
59- , EndDateInclusiveDT = DATEADD(MILLISECOND, - 3 , DATEADD(DAY, 1 , CONVERT (datetime , x .EndDate )))
60- , EndDateInclusiveDT2 = DATEADD(NANOSECOND, - 100 , DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))) -- +1 day -1 tick
61- , EndDateExclusive = DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))
56+ SELECT Code = UPPER (@DateCode)
57+ , [Label] = CONCAT_WS(' ' , CASE LEFT(@DateCode, 1 ) WHEN ' L' THEN ' Last' WHEN ' P' THEN ' Previous' ELSE NULL END, t.[Value], ' days' )
58+ , BeginDate = CONVERT (datetime2, x .BeginDate )
59+ , EndDateInclusiveDT = DATEADD(MILLISECOND, - 3 , DATEADD(DAY, 1 , CONVERT (datetime , x .EndDate )))
60+ , EndDateInclusiveDT2 = DATEADD(NANOSECOND, - 100 , DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))) -- +1 day -1 tick
61+ , EndDateExclusive = DATEADD(DAY, 1 , CONVERT (datetime2, x .EndDate ))
6262 FROM (
63- SELECT [Value] = CONVERT (int , SUBSTRING (@DateCode, 2 , LEN(@DateCode)- 2 ))
64- , Multiplier = IIF(LEFT(@DateCode, 1 ) = ' P' , 2 , 1 )
63+ SELECT [Value] = CONVERT (int , SUBSTRING (@DateCode, 2 , LEN(@DateCode)- 2 ))
64+ , Multiplier = IIF(LEFT(@DateCode, 1 ) = ' P' , 2 , 1 )
6565 ) t
6666 CROSS APPLY (
67- SELECT BeginDate = DATEADD(DAY , - ((t.[Value] * t .Multiplier )- 1 ), @SeedDate)
68- , EndDate = DATEADD(DAY , - (t.[Value] * (t .Multiplier - 1 )), @SeedDate)
67+ SELECT BeginDate = DATEADD(DAY, - ((t.[Value] * t .Multiplier )- 1 ), @SeedDate)
68+ , EndDate = DATEADD(DAY, - (t.[Value] * (t .Multiplier - 1 )), @SeedDate)
6969 ) x
7070 WHERE @DateCode LIKE ' [LP][0-9]D'
7171 OR @DateCode LIKE ' [LP][0-9][0-9]D'
7575END;
7676GO
7777
78- -- SELECT * FROM dbo.uf_DateCalc(NULL, NULL)
78+ -- SELECT * FROM dbo.uf_DateCalc(NULL, NULL);
0 commit comments