Skip to content

Commit c32782f

Browse files
authored
Add files via upload
1 parent 34fe4bf commit c32782f

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
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
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
IF OBJECT_ID('dbo.uf_DateRange') IS NOT NULL DROP FUNCTION dbo.uf_DateRange
2+
GO
3+
-- =============================================
4+
-- Author: Chad Baldwin
5+
-- Create date: 2017-04-13
6+
-- Description: Dates
7+
-- =============================================
8+
CREATE FUNCTION dbo.uf_DateRange (
9+
@DateFrom DATETIME,
10+
@DateTo DATETIME,
11+
@Increment VARCHAR(20)
12+
)
13+
RETURNS @Return TABLE (
14+
BeginDate DATETIME,
15+
EndDate DATETIME
16+
)
17+
AS
18+
BEGIN
19+
IF @Increment NOT IN ('year','yy','yyyy','quarter','qq','q','month','mm','m','week','wk','ww','day','dd','d','hour','hh','minute','mi','n','second','ss','s') RETURN
20+
21+
DECLARE @TargetDate DATETIME = @DateTo,
22+
@LoopLimit INT = 5000,
23+
@Counter INT = 0
24+
25+
DECLARE @DateRange TABLE (BeginDate DATETIME, EndDate DATETIME)
26+
27+
WHILE (@Counter < @LoopLimit)
28+
BEGIN
29+
INSERT INTO @Return (BeginDate, EndDate)
30+
SELECT BeginDate = CASE WHEN @Increment IN ('year' , 'yy', 'yyyy') THEN DATEADD(yy, DATEDIFF(yy, 0, @TargetDate), 0)
31+
WHEN @Increment IN ('quarter', 'qq', 'q' ) THEN DATEADD(qq, DATEDIFF(qq, 0, @TargetDate), 0)
32+
WHEN @Increment IN ('month' , 'mm', 'm' ) THEN DATEADD(mm, DATEDIFF(mm, 0, @TargetDate), 0)
33+
WHEN @Increment IN ('week' , 'wk', 'ww' ) THEN DATEADD(ww, DATEDIFF(ww, 0, @TargetDate), 0)
34+
WHEN @Increment IN ('day' , 'dd', 'd' ) THEN DATEADD(dd, DATEDIFF(dd, 0, @TargetDate), 0)
35+
WHEN @Increment IN ('hour' , 'hh' ) THEN DATEADD(hh, DATEDIFF(hh, 0, @TargetDate), 0)
36+
WHEN @Increment IN ('minute' , 'mi', 'n' ) THEN DATEADD(mi, DATEDIFF(mi, 0, @TargetDate), 0)
37+
WHEN @Increment IN ('second' , 'ss', 's' ) THEN DATEADD(ss, DATEDIFF(ss, 0, @TargetDate), 0)
38+
END
39+
, EndDate = DATEADD(ms, -3,
40+
CASE WHEN @Increment IN ('year' , 'yy', 'yyyy') THEN DATEADD(yy, DATEDIFF(yy, 0, @TargetDate) + 1, 0)
41+
WHEN @Increment IN ('quarter', 'qq', 'q' ) THEN DATEADD(qq, DATEDIFF(qq, 0, @TargetDate) + 1, 0)
42+
WHEN @Increment IN ('month' , 'mm', 'm' ) THEN DATEADD(mm, DATEDIFF(mm, 0, @TargetDate) + 1, 0)
43+
WHEN @Increment IN ('week' , 'wk', 'ww' ) THEN DATEADD(ww, DATEDIFF(ww, 0, @TargetDate) + 1, 0)
44+
WHEN @Increment IN ('day' , 'dd', 'd' ) THEN DATEADD(dd, DATEDIFF(dd, 0, @TargetDate) + 1, 0)
45+
WHEN @Increment IN ('hour' , 'hh' ) THEN DATEADD(hh, DATEDIFF(hh, 0, @TargetDate) + 1, 0)
46+
WHEN @Increment IN ('minute' , 'mi', 'n' ) THEN DATEADD(mi, DATEDIFF(mi, 0, @TargetDate) + 1, 0)
47+
WHEN @Increment IN ('second' , 'ss', 's' ) THEN DATEADD(ss, DATEDIFF(ss, 0, @TargetDate) + 1, 0)
48+
END)
49+
SET @TargetDate = CASE WHEN @Increment IN ('year' , 'yy', 'yyyy') THEN DATEADD(yy, -1, @TargetDate)
50+
WHEN @Increment IN ('quarter', 'qq', 'q' ) THEN DATEADD(qq, -1, @TargetDate)
51+
WHEN @Increment IN ('month' , 'mm', 'm' ) THEN DATEADD(mm, -1, @TargetDate)
52+
WHEN @Increment IN ('week' , 'wk', 'ww' ) THEN DATEADD(ww, -1, @TargetDate)
53+
WHEN @Increment IN ('day' , 'dd', 'd' ) THEN DATEADD(dd, -1, @TargetDate)
54+
WHEN @Increment IN ('hour' , 'hh' ) THEN DATEADD(hh, -1, @TargetDate)
55+
WHEN @Increment IN ('minute' , 'mi', 'n' ) THEN DATEADD(mi, -1, @TargetDate)
56+
WHEN @Increment IN ('second' , 'ss', 's' ) THEN DATEADD(ss, -1, @TargetDate)
57+
END
58+
IF @TargetDate <= @DateFrom BREAK
59+
SET @Counter += 1
60+
END
61+
62+
RETURN
63+
END
64+
GO

0 commit comments

Comments
 (0)