如下图是我想要实现的效果,那几条数据是我手工添加的,但是这个工作量太大了。
请问有没有什么比较简便的方法,可以批量添加整年的周末日期。
比如批量添加2013年的周末日期,2014年的周末日期,2015年的周末日期等等。
谢谢。


------解决思路----------------------
可以使用存储过程过触发器吗
------解决思路----------------------
逻辑:通过一个已经的周末日期定点,通过取余为0或1,则为周末。
比如,知道2015-04-11为周六,则与其他日期的天数取余0或1则为周六或周日
SELECT DATEADD(DAY,3,GETDATE()), DATEADD(DAY,number,GETDATE())
,DATEDIFF(DAY,DATEADD(DAY,3,getdate()),DATEADD(DAY,number,GETDATE()))%7
,CASE WHEN DATEDIFF(DAY,DATEADD(DAY,3,getdate()),DATEADD(DAY,number,GETDATE()))%7=0
OR DATEDIFF(DAY,DATEADD(DAY,3,getdate()),DATEADD(DAY,number,GETDATE()))%7=1
THEN 'Weekend' ELSE 'Workday' END
FROM master..spt_values
WHERE number>=3 AND type='P'
------解决思路----------------------
-- 建个日历表方便各种日历操作
CREATE TABLE Calendar(
dt date PRIMARY KEY,
weekday int NOT NULL,
isWorkday bit NOT NULL
)
GO
-- 填充一年的数据
SET DATEFIRST 1
INSERT INTO Calendar
SELECT dt,
DatePart(weekday,dt) weekday,
CASE WHEN DatePart(weekday,dt) <=5 THEN
1
ELSE
0
END workday
FROM (
SELECT DateAdd(day,number,'2015-01-01') dt
FROM master..spt_values
WHERE type = 'p'
AND number < 365
) t
-- 你需要的一段周末
SELECT *
FROM Calendar
WHERE dt >= '2015-04-01'
AND dt < '2015-05-01'
AND isWorkday = 0
dt weekday isWorkday
---------- ----------- ---------
2015-04-04 6 0
2015-04-05 7 0
2015-04-11 6 0
2015-04-12 7 0
2015-04-18 6 0
2015-04-19 7 0
2015-04-25 6 0
2015-04-26 7 0