Skip to content

Commit 788907f

Browse files
authored
Update dbo.uf_DateCalc.UserDefinedFunction.sql
1 parent c1a4dcf commit 788907f

File tree

1 file changed

+40
-40
lines changed

1 file changed

+40
-40
lines changed

dbo.uf_DateCalc.UserDefinedFunction.sql

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,60 +12,60 @@ RETURNS @Return table (
1212
)
1313
AS
1414
BEGIN;
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'
@@ -75,4 +75,4 @@ BEGIN;
7575
END;
7676
GO
7777

78-
-- SELECT * FROM dbo.uf_DateCalc(NULL, NULL)
78+
-- SELECT * FROM dbo.uf_DateCalc(NULL, NULL);

0 commit comments

Comments
 (0)