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

Mở port trên firewall để SQL truy cập (Windows)

Sending Emails in Asp.Net Identity using Dependency Injection, Sendgrid and debugging it with Mailtrap.io

How to enable automatic sign-in after Windows server reboot?