1
+ IF OBJECT_ID (' dbo.uf_DateCalc' ) IS NOT NULL DROP FUNCTION dbo .uf_DateCalc
2
+ GO
3
+ -- =============================================
4
+ -- Author: Chad Baldwin
5
+ -- Create date: 2017-04-13
6
+ -- Description: Dates
7
+ -- =============================================
8
+ CREATE FUNCTION dbo .uf_DateCalc (
9
+ @SeedDate DATE ,
10
+ @DateCode VARCHAR (5 )
11
+ )
12
+ RETURNS @Return TABLE (
13
+ Code VARCHAR (5 ),
14
+ Label VARCHAR (100 ),
15
+ BeginDate DATETIME ,
16
+ EndDate DATETIME ,
17
+ EndOfDayDate DATETIME
18
+ )
19
+ AS
20
+ BEGIN
21
+ SELECT @SeedDate = COALESCE (@SeedDate, GETDATE ())
22
+
23
+ INSERT INTO @Return (Code, Label, BeginDate, EndDate, EndOfDayDate)
24
+ SELECT Code = x .Code
25
+ , Label = CONVERT (VARCHAR (100 ), x.[Period])
26
+ , BeginDate = CONVERT (DATETIME , x .BeginDate )
27
+ , EndDate = CONVERT (DATETIME , x .EndDate )
28
+ , EndOfDayDate = x .EndDate + CONVERT (DATETIME , ' 23:59:59.997' )
29
+ FROM (
30
+ SELECT Today = CONVERT (DATETIME , @SeedDate) -- Reporting on last complete day
31
+ ) t
32
+ CROSS APPLY (SELECT DiffYY = DATEDIFF (yy, 0 , t .Today )
33
+ , DiffMM = DATEDIFF (mm, 0 , t .Today )
34
+ , DiffWK = DATEDIFF (wk, 0 , t .Today )
35
+ , DiffDD = DATEDIFF (dd, 0 , t .Today )
36
+ , DiffQQ = DATEDIFF (qq, 0 , t .Today )
37
+ ) y
38
+ CROSS APPLY (
39
+ VALUES (' D' , ' Day' , t .Today , t .Today )
40
+ , (' M' , ' Month' , DATEADD (mm, y .DiffMM , 0 ) , DATEADD (mm, y .DiffMM + 1 , 0 ) - 1 )
41
+ , (' MTD' , ' Month To Date' , DATEADD (mm, y .DiffMM , 0 ) , t .Today )
42
+ , (' Q' , ' Quarter' , DATEADD (qq, y .DiffQQ , 0 ) , DATEADD (qq, y .DiffQQ + 1 , 0 ) - 1 )
43
+ , (' QTD' , ' Quarter to Date' , DATEADD (qq, y .DiffQQ , 0 ) , t .Today )
44
+ , (' YTD' , ' Year To Date' , DATEADD (yy, y .DiffYY , 0 ) , t .Today )
45
+
46
+ , (' PD' , ' Previous Day' , t .Today - 1 , t .Today - 1 )
47
+ , (' PW' , ' Previous Week' , DATEADD (wk, y .DiffWK - 1 , 0 ) , DATEADD (wk, y .DiffWK , 0 ) - 1 )
48
+ , (' PM' , ' Previous Month' , DATEADD (mm, y .DiffMM - 1 , 0 ) , DATEADD (mm, y .DiffMM , 0 ) - 1 )
49
+ , (' PMTD' , ' Previous Month to Date' , DATEADD (mm, y .DiffMM - 1 , 0 ) , DATEADD (mm, - 1 , t .Today ) )
50
+ , (' PQ' , ' Previous Quarter' , DATEADD (qq, y .DiffQQ - 1 , 0 ) , DATEADD (qq, y .DiffQQ , 0 ) - 1 )
51
+ , (' PQTD' , ' Previous Quarter to Date' , DATEADD (qq, y .DiffQQ - 1 , 0 ) , DATEADD (qq, - 1 , t .Today ) )
52
+ , (' PYQ' , ' Previous Year Quarter' , DATEADD (qq, y .DiffQQ - 4 , 0 ) , DATEADD (qq, y .DiffQQ - 3 , 0 ) - 1 )
53
+ , (' PYQTD' , ' Previous Year Quarter to Date' , DATEADD (qq, y .DiffQQ - 4 , 0 ) , DATEADD (yy, - 1 , t .Today ) )
54
+ , (' PY' , ' Previous Year' , DATEADD (yy, y .DiffYY - 1 , 0 ) , DATEADD (yy, y .DiffYY , 0 ) - 1 )
55
+ , (' PYTD' , ' Previous Year to Date' , DATEADD (yy, y .DiffYY - 1 , 0 ) , DATEADD (yy, - 1 , t .Today ) )
56
+
57
+ , (' L7D' , ' Last 7 days' , t .Today - ( 7 - 1 ) , t .Today )
58
+ , (' L14D' , ' Last 14 days' , t .Today - (14 - 1 ) , t .Today )
59
+ , (' L21D' , ' Last 21 days' , t .Today - (21 - 1 ) , t .Today )
60
+ , (' L28D' , ' Last 28 days' , t .Today - (28 - 1 ) , t .Today )
61
+ , (' L30D' , ' Last 30 days' , t .Today - (30 - 1 ) , t .Today )
62
+ , (' L60D' , ' Last 60 days' , t .Today - (60 - 1 ) , t .Today )
63
+ , (' L90D' , ' Last 90 days' , t .Today - (90 - 1 ) , t .Today )
64
+
65
+ -- , ('L2M' , 'Last 2 months' , DATEADD(mm, y.DiffMM - 2, 0) , DATEADD(mm, y.DiffMM, 0) - 1 )
66
+ -- , ('L3M' , 'Last 3 months' , DATEADD(mm, y.DiffMM - 3, 0) , DATEADD(mm, y.DiffMM, 0) - 1 )
67
+ -- , ('L4M' , 'Last 4 months' , DATEADD(mm, y.DiffMM - 4, 0) , DATEADD(mm, y.DiffMM, 0) - 1 )
68
+ -- , ('L5M' , 'Last 5 months' , DATEADD(mm, y.DiffMM - 5, 0) , DATEADD(mm, y.DiffMM, 0) - 1 )
69
+ -- , ('L6M' , 'Last 6 months' , DATEADD(mm, y.DiffMM - 6, 0) , DATEADD(mm, y.DiffMM, 0) - 1 )
70
+ ) x(Code, [Period], BeginDate, EndDate)
71
+ WHERE x .Code = @DateCode OR @DateCode IS NULL
72
+
73
+ RETURN
74
+ END
75
+ GO
0 commit comments