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)

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

Bulk Insert Update in C# using Stored Procedure