读书人

请大神指点~该如何处理

发布时间: 2012-01-15 22:57:48 作者: rapoo

请大神指点~~
计算有效工作时间( 单位 :分钟 )

方式:存储过程或其他形式(跪求 附注释)

测试时间:开始 2011-01-01
结束 2011-12-31
工作时间
--上午
09:00——12:00
--下午
13:30——18:00
--休息时间
12:00——13:30


*附
--1
计算的开始、结束时间也会在上午、下午、休息时间段内
当天
09:00以前 开始 视为 09:00
12:00以后 13:30之前 开始 视为 13:30

18:00以后 结束 视为 18:00
12:00以后 13:30之前 结束 视为 12:00
--2
除去自定义节假日表 bz_workday

bz_workday (hdate datetime,name char(20))

*部分内容




hdate name
2011-01-01 00:00:00.000元旦
2011-01-02 00:00:00.000元旦
2011-01-03 00:00:00.000元旦
2011-01-08 00:00:00.000星期六
2011-01-09 00:00:00.000星期日
2011-01-15 00:00:00.000星期六
2011-01-16 00:00:00.000星期日
2011-01-22 00:00:00.000星期六
2011-01-23 00:00:00.000星期日
2011-01-29 00:00:00.000星期六
2011-01-30 00:00:00.000星期日
2011-02-01 00:00:00.000春节
2011-02-02 00:00:00.000春节
2011-02-03 00:00:00.000春节
2011-02-04 00:00:00.000春节
2011-02-05 00:00:00.000春节
2011-02-06 00:00:00.000春节
2011-02-07 00:00:00.000春节
2011-02-08 00:00:00.000春节
2011-02-12 00:00:00.000星期六
2011-02-13 00:00:00.000星期日
2011-02-19 00:00:00.000星期六
2011-02-20 00:00:00.000星期日
2011-02-26 00:00:00.000星期六
2011-02-27 00:00:00.000星期日


[解决办法]

SQL code
create table bz_workday (hdate datetime,name char(20))insert into bz_workday select '2011-01-01 00:00:00.000','元旦'   insert into bz_workday select '2011-01-02 00:00:00.000','元旦'   insert into bz_workday select '2011-01-03 00:00:00.000','元旦'   insert into bz_workday select '2011-01-08 00:00:00.000','星期六'   insert into bz_workday select '2011-01-09 00:00:00.000','星期日'   insert into bz_workday select '2011-01-15 00:00:00.000','星期六'   insert into bz_workday select '2011-01-16 00:00:00.000','星期日'   insert into bz_workday select '2011-01-22 00:00:00.000','星期六'   insert into bz_workday select '2011-01-23 00:00:00.000','星期日'   insert into bz_workday select '2011-01-29 00:00:00.000','星期六'   insert into bz_workday select '2011-01-30 00:00:00.000','星期日'   insert into bz_workday select '2011-02-01 00:00:00.000','春节' insert into bz_workday select '2011-02-02 00:00:00.000','春节'  insert into bz_workday select '2011-02-03 00:00:00.000','春节'   insert into bz_workday select '2011-02-04 00:00:00.000','春节'   insert into bz_workday select '2011-02-05 00:00:00.000','春节'   insert into bz_workday select '2011-02-06 00:00:00.000','春节'   insert into bz_workday select '2011-02-07 00:00:00.000','春节'   insert into bz_workday select '2011-02-08 00:00:00.000','春节'   insert into bz_workday select '2011-02-12 00:00:00.000','星期六'   insert into bz_workday select '2011-02-13 00:00:00.000','星期日'   insert into bz_workday select '2011-02-19 00:00:00.000','星期六'   insert into bz_workday select '2011-02-20 00:00:00.000','星期日'   insert into bz_workday select '2011-02-26 00:00:00.000','星期六'   insert into bz_workday select '2011-02-27 00:00:00.000','星期日'goselect COUNT(*)*7.5*60 worktime  --根据楼主的标准,每天工作时间为7.5小时from master..spt_values a where type='p' and DATEADD(d,number,'2011-01-01')<'2012-01-01'and not exists(select 1 from bz_workday where hdate=DATEADD(d,number,'2011-01-01'))/*worktime---------------------------------------153000.0(1 行受影响)*/godrop table bz_workday 


[解决办法]

SQL code
declare @s as datetime,@e as datetime;set @s='20050101';set @e='20051231';select days/7+days%7-case when 6 between wd and wd+ days%7-1 then 1 else 0 end-case when 7 between wd and wd+ days%7-1 then 1 esle 0 endfrom (select datediff(day,@s,@e)+1 as days,datepart(weekday,@s+@@datefirst-1)as wd)as d; 

读书人网 >SQL Server

热点推荐