当前位置: 代码迷 >> Sql Server >> 请问sql server 2008怎么批量导入周末日期
  详细解决方案

请问sql server 2008怎么批量导入周末日期

热度:91   发布时间:2016-04-24 09:13:46.0
请教sql server 2008如何批量导入周末日期
如下图是我想要实现的效果,那几条数据是我手工添加的,但是这个工作量太大了。
请问有没有什么比较简便的方法,可以批量添加整年的周末日期。
比如批量添加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
  相关解决方案