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
相关新闻>>
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>