SQL:创建某一时间段内的周末日期表以及特殊处理日期表

来源:未知 责任编辑:责任编辑 发表时间:2015-09-09 15:37 点击:

近期有个功能需要判断某个给定日内(如 2012-01-06到2012-07-31)有多少个工作日,其中需要用到一个周末日期表,此表列出给定日期段内的所有属于周末的日期。
于是创建如下: 
 
DROP TABLE #calendar 
 
CREATE TABLE #calendar (calendardate DATETIME) 
 
DECLARE @startdate DATETIME
DECLARE @enddate DATETIME
  www.2cto.com  
SET @startdate='2012-01-01' 
SET @enddate='2012-07-31' 
 
WHILE @startdate <= @enddate
 BEGIN
   INSERT INTO #calendar
   ( calendardate)
   SELECT  @startdate
   
   SET @startdate = dateadd (DD, 1, @startdate)
 END
 
SELECT *  FROM #calendar
 
 SELECT CALENDARDATE,datename(dw,calendardate) AS DAYNAME 
  ,CASE WHEN datename(dw,calendardate)='Saturday'      THEN dateadd(mi,390,calendardate) 
        WHEN datename(dw,calendardate)='Monday'        THEN dateadd(ss,23399,calendardate) 
        ELSE   calendardate 
   END  AS DELwithWEEKEND
 FROM  #calendar   www.2cto.com  
 WHERE  datename(dw,calendardate) in ('Saturday','Monday') 
 ORDER BY CALENDARDATE
 
还有另一个类似的解决方案,我们创建一个表,此表把给定日期段的每一天都归入某一类(eg:holiday, workday, EOMProcessdate....)如下图:

 
创建步骤如下:
1、创建一个临时表
 
create table #Corporate_Calendar (
Dateid int identity(1,1),
Date datetime, 
Holiday bit default 0, 
Workday bit default 0, 
EOMProcessdate bit default 0,
EOWProcessdate bit default 0,
SpecialProcessdate bit default 0,
Datestamp datetime default getdate())
go
 
 
2、在此临时表内填充所有日期。
你需要指定开始的日期以后此后跨度的天数,如此例,我们从2012年1月1号开始,往后创建365天,即2012年一年的数据。
 
declare @n int
declare @maxn int
declare @begindate datetime
set @n =1
set @maxn=365 -- 日期表中需要创建的天数
set @begindate =convert(datetime,'01/01/2012')
  --日期表内的第一天  www.2cto.com  
set @begindate =@begindate -1
 
while @n <= @maxn
begin
insert into #Corporate_Calendar(date) select @begindate+@n
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • sql常见面试题
  • SQL SERVER 2005性能之跟踪
  • LINUX上RMAN自动备份脚本
  • sql server 列转行
  • SQL SERVER2008日常自动化备份
  • SQL Server 2005 镜像构建手册
  • SQL编程(一)
  • 如何将多个SQL查询统计结果一次显示出来
  • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1