General DimDate

 DECLARE @StartDate  date = DATEFROMPARTS(YEAR(GetDate()),1, 1);


DECLARE @CutoffDate date =DATEFROMPARTS(YEAR(GetDate()), 12, 31) --DATEADD(DAY, -1, DATEADD(YEAR, 1, @StartDate));

SET DATEFIRST 1

;WITH seq(n) AS 

(

  SELECT 0 UNION ALL SELECT n + 1 FROM seq

  WHERE n < DATEDIFF(DAY, @StartDate, @CutoffDate)

),

d(d) AS 

(

  SELECT DATEADD(DAY, n, @StartDate) FROM seq

),

src AS

(

  SELECT 

Id =YEAR(d ) *10000 + MONTH (d) *100 + DAY(d) ,

    TheDate         = CONVERT(date, d),

    TheDay          = DATEPART(DAY,       d),

    TheDayName      = DATENAME(WEEKDAY,   d),

    TheWeek         = DATEPART(WEEK,      d),

    TheISOWeek      = DATEPART(ISO_WEEK,  d),

    TheDayOfWeek    = DATEPART(WEEKDAY,   d) ,

    TheMonth        = DATEPART(MONTH,     d),

    TheMonthName    = DATENAME(MONTH,     d),

    TheQuarter      = DATEPART(Quarter,   d),

    TheYear         = DATEPART(YEAR,      d),

    TheFirstOfMonth = DATEFROMPARTS(YEAR(d), MONTH(d), 1),

    TheLastOfYear   = DATEFROMPARTS(YEAR(d), 12, 31),

    TheDayOfYear    = DATEPART(DAYOFYEAR, d),

[MonthName] = LEFT(DATENAME(MONTH, d),3),

WeekYear = 'W'+Convert(nvarchar(2),(DATEPART(WEEK,d)) ) +'-'+Convert(nvarchar(4), YEAR(d)) ,

QuarterName ='Q'+CONVERT(nvarchar(2),DATEPART(Quarter,   d)),

MonthYear =LEFT(DATENAME(MONTH, d),3)  +'-'+Convert(nvarchar(4), YEAR(d)),

QuarterYear ='Q'+CONVERT(nvarchar(2),DATEPART(Quarter,   d))  +'-'+Convert(nvarchar(4), YEAR(d)),

WeekStartDate =DATEADD (DAY,1 - DATEPART(WEEKDAY,d),d ),

WeekEndDate =DATEADD (DAY,7 - DATEPART(WEEKDAY,d),d )

  FROM d

)

SELECT * FROM src

  ORDER BY TheDate

  OPTION (MAXRECURSION 0);

Comments

Popular posts from this blog

Data Import Best Practices in Power BI

TRIGGER AUDIT TABLE SQL SERVER

Power BI Performance Tips and Techniques