Quarter, Month and Half-Year Start and End Dates in SQL Server
sqlSQLtipssql-serverdatetime
Work out the first and last day of the current financial half-year (April to September, October to March), the current quarter and the current month from today's date with DATEADD and DATEDIFF.
DECLARE @curDate DATETIME = GETDATE();
-- Financial half-year: April to September, or October to March
DECLARE @HalfFrom DATE =
CASE WHEN MONTH(@curDate) BETWEEN 4 AND 9 THEN CAST(CAST(YEAR(@curDate) AS VARCHAR(4)) + '-04-01' AS DATE)
WHEN MONTH(@curDate) > 9 THEN CAST(CAST(YEAR(@curDate) AS VARCHAR(4)) + '-10-01' AS DATE)
ELSE CAST(CAST(YEAR(@curDate) - 1 AS VARCHAR(4)) + '-10-01' AS DATE)
END;
DECLARE @HalfTo DATE =
CASE WHEN MONTH(@curDate) BETWEEN 4 AND 9 THEN CAST(CAST(YEAR(@curDate) AS VARCHAR(4)) + '-09-30' AS DATE)
WHEN MONTH(@curDate) > 9 THEN CAST(CAST(YEAR(@curDate) + 1 AS VARCHAR(4)) + '-03-31' AS DATE)
ELSE CAST(CAST(YEAR(@curDate) AS VARCHAR(4)) + '-03-31' AS DATE)
END;
SELECT @HalfFrom AS HalfYearStart, @HalfTo AS HalfYearEnd;
-- Quarter start and end dates
DECLARE @QuarterFrom DATE = DATEADD(q, DATEDIFF(q, 0, @curDate), 0);
DECLARE @QuarterTo DATE = DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, @curDate) + 1, 0));
SELECT @QuarterFrom AS QuarterStart, @QuarterTo AS QuarterEnd;
-- Month start and end dates
DECLARE @MonthFrom DATE = DATEADD(M, DATEDIFF(M, 0, @curDate), 0);
DECLARE @MonthTo DATE = DATEADD(M, DATEDIFF(M, 0, @curDate) + 1, -1);
SELECT @MonthFrom AS MonthStart, @MonthTo AS MonthEnd;
Comments
Loading comments…