分享一個簡易日曆製做。只須要用很簡單的語句,就能夠生成一個日曆表。應用場景能夠結合銷售日曆啊,或者考勤表什麼的~還有會有好處sql
1 建立測試表函數
CREATE TABLE TestDate ( ID INT IDENTITY PRIMARY KEY, Date DATE, --日期 WeekDay NVARCHAR(50), --星期幾 IsWeekend BIT, --是否週末 IsHoliday BIT DEFAULT 0, --是否假日 IsDayOff AS IsWeekend | IsHoliday, --是否休息日 Remark NVARCHAR(200) --備註 )
2 生成今年2018年的日曆表測試
;WITH CTE AS ( SELECT CONVERT(DATE,'2018-01-01') AS Date, CASE DATEPART(WEEKDAY,'2018-01-01') WHEN 1 THEN 1 WHEN 7 THEN 1 ELSE 0 END AS IsWeekend UNION ALL SELECT DATEADD(dd,1,CTE.Date), CASE DATEPART(WEEKDAY,DATEADD(dd,1,CTE.Date)) WHEN 1 THEN 1 WHEN 7 THEN 1 ELSE 0 END AS IsWeekend FROM CTE WHERE CTE.Date < '2018-12-31' ) INSERT INTO dbo.TestDate ( Date, IsWeekend, WeekDay ) SELECT CTE.Date,CTE.IsWeekend,FORMAT(CTE.Date,'dddd') FROM CTE OPTION (MAXRECURSION 0)
若是須要更新個假日,能夠醬汁spa
UPDATE dbo.TestDate SET IsHoliday = 1,Remark = '元旦' WHERE FORMAT(Date,'MM-dd') = '01-01' --當初始化不止一年的時候就能夠這樣玩了~code
而後效果orm
ID Date WeekDay IsWeekend IsHoliday IsDayOff Remark ----------- ---------- -------------------------------------------------- --------- --------- -------- ------------- 1 2018-01-01 星期一 0 1 1 元旦 2 2018-01-02 星期二 0 0 0 NULL 3 2018-01-03 星期三 0 0 0 NULL 4 2018-01-04 星期四 0 0 0 NULL 5 2018-01-05 星期五 0 0 0 NULL 6 2018-01-06 星期六 1 0 1 NULL 7 2018-01-07 星期日 1 0 1 NULL 8 2018-01-08 星期一 0 0 0 NULL 9 2018-01-09 星期二 0 0 0 NULL 10 2018-01-10 星期三 0 0 0 NULL 11 2018-01-11 星期四 0 0 0 NULL 12 2018-01-12 星期五 0 0 0 NULL 13 2018-01-13 星期六 1 0 1 NULL 14 2018-01-14 星期日 1 0 1 NULL 15 2018-01-15 星期一 0 0 0 NULL 16 2018-01-16 星期二 0 0 0 NULL 17 2018-01-17 星期三 0 0 0 NULL 18 2018-01-18 星期四 0 0 0 NULL 19 2018-01-19 星期五 0 0 0 NULL 20 2018-01-20 星期六 1 0 1 NULL 21 2018-01-21 星期日 1 0 1 NULL 22 2018-01-22 星期一 0 0 0 NULL
若是要加什麼輔助字段~那麼按需添加就行了~blog
PS:主要是Format這個函數在某些特定的狀況是很是好用噠~class