SQLTeam.com | Weblogs | Forums

SQL Server date format help

Hello All,
I need to populate dates as displayed in below table format for 36 months from current month. Your help will be very much appreciated. Table information I have to get to the below data structure is that,
I have a table called Date_format with a column name current_Date which hold current date on it.

Start_DATE End_Date MEASURE_MONTH
2017-03-01 2017-03-31 2017-03
2017-04-01 2017-04-30 2017-04
2017-05-01 2017-05-31 2017-05
2017-06-01 2017-06-30 2017-06
2017-07-01 2017-07-31 2017-07
2017-08-01 2017-08-31 2017-08
2017-09-01 2017-09-30 2017-09
2017-10-01 2017-10-31 2017-10
2017-11-01 2017-11-30 2017-11
2017-12-01 2017-12-31 2017-12
2018-01-01 2018-01-31 2018-01
2018-02-01 2018-02-28 2018-02
2018-03-01 2018-03-31 2018-03
2018-04-01 2018-04-30 2018-04
2018-05-01 2018-05-31 2018-05
2018-06-01 2018-06-30 2018-06
2018-07-01 2018-07-31 2018-07
2018-08-01 2018-08-31 2018-08
2018-09-01 2018-09-30 2018-09
2018-10-01 2018-10-31 2018-10
2018-11-01 2018-11-30 2018-11
2018-12-01 2018-12-31 2018-12
2019-01-01 2019-01-31 2019-01
2019-02-01 2019-02-28 2019-02
2019-03-01 2019-03-31 2019-03
2019-04-01 2019-04-30 2019-04
2019-05-01 2019-05-31 2019-05
2019-06-01 2019-06-30 2019-06
2019-07-01 2019-07-31 2019-07
2019-08-01 2019-08-31 2019-08
2019-09-01 2019-09-30 2019-09
2019-10-01 2019-10-31 2019-10
2019-11-01 2019-11-30 2019-11
2019-12-01 2019-12-31 2019-12
2020-01-01 2020-01-31 2020-01
2020-02-01 2020-02-28 2020-02

Maybe this?

use sqlteam
go

DECLARE @StartDate DATE = cast(getdate() as date);
DECLARE @CutoffDate DATE = DATEADD(MONTH, 36, @StartDate);

SELECT Start_DATE,  End_Date, MEASURE_MONTH
FROM
(
  SELECT Start_DATE  = DATEADD(DAY,1,EOMONTH(DATEADD(MONTH, rn - 1, @StartDate),-1)),
		 End_Date  = EOMONTH(DATEADD(MONTH, rn - 1, @StartDate)),
		 MEASURE_MONTH = convert(varchar(7), DATEADD(MONTH, rn - 1, @StartDate), 120)
  FROM 
  (
    SELECT TOP (DATEDIFF(DAY, @StartDate, @CutoffDate)) 
      rn = ROW_NUMBER() OVER (ORDER BY s1.[object_id])
    FROM sys.all_objects AS s1 
    CROSS JOIN sys.all_objects AS s2
    ORDER BY s1.[object_id]
  ) AS x
) AS y;