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

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

Import JSON data into SQL Server

Hướng dẫn tạo Users, OU và phân quyền quản lý OU trên Windows