我现在输入开始时间跟结束时间,需要计算出有效的工作时间
上午有效工作时间--08:30:00 到 11:45:00
下午有效工作时间--12:45:00 到 17:30:00
除了给出上午下午有效工作时间以外最好可以给出8小时外工作时间
也就是大于17:30:00的工作时间
请高手解答
上午有效工作时间--08:30:00 到 11:45:00
下午有效工作时间--12:45:00 到 17:30:00
除了给出上午下午有效工作时间以外最好可以给出8小时外工作时间
也就是大于17:30:00的工作时间
请高手解答
http://topic.csdn.net/u/20110802/12/bd95516e-0078-4657-a8a1-477b696f64c2.html
有几个问题问下LZ
1.打卡时间是不是小鱼8点30就不算数的,也就是说,开始时间肯定大于8点30
2.有迟到早退对吧
3.晚上不会有过12点的吧
select case when convert(varchar(8),开始时间,108) > '08:30:00' then datediff(mi,convert(varchar(8),开始时间,108),'11:45:00') else datediff(mi,'08:30:00','11:45:00') end +
case when convert(varchar(8),结束时间,108) < '17:30:00' then datediff(mi,'12:45:00',convert(varchar(8),结束时间,108)) else datediff(mi,'12:45:00','17:30:00') end 有效工作时间,
case when convert(varchar(8),结束时间,108) > '17:30:00' then datediff(mi,'17:30:00',convert(varchar(8),结束时间,108)) else 0 end [大于17:30:00的工作时间]
from tb
select 姓名,sum(case when convert(varchar(8),开始时间,108) > '08:30:00' then datediff(mi,convert(varchar(8),开始时间,108),'11:45:00') else datediff(mi,'08:30:00','11:45:00') end +
case when convert(varchar(8),结束时间,108) < '17:30:00' then datediff(mi,'12:45:00',convert(varchar(8),结束时间,108)) else datediff(mi,'12:45:00','17:30:00') end) 有效工作时间,
sum(case when convert(varchar(8),结束时间,108) > '17:30:00' then datediff(mi,'17:30:00',convert(varchar(8),结束时间,108)) else 0 end) [大于17:30:00的工作时间]
from tb
group by 姓名
insert into tb values('刘鸿飞' ,'检查员', '2009-12-2 8:30', '2009-12-8 18:30')
insert into tb values('张风苓' ,'作业员', '2009-12-2 8:30', '2009-12-8 18:30')
insert into tb values('何林林' ,'作业员', '2009-12-2 8:30', '2009-12-8 18:30')
insert into tb values('贺向峰' ,'作业员', '2009-12-2 8:30', '2009-12-8 18:30')
insert into tb values('黄文艳' ,'作业员', '2009-12-2 8:30', '2009-12-8 18:30')
insert into tb values('李静' ,'作业员', '2009-12-2 8:30', '2009-12-8 18:30')
goselect 姓名,sum(case when convert(varchar(8),开始时间,108) > '08:30:00' then datediff(mi,convert(varchar(8),开始时间,108),'11:45:00') else datediff(mi,'08:30:00','11:45:00') end +
case when convert(varchar(8),结束时间,108) < '17:30:00' then datediff(mi,'12:45:00',convert(varchar(8),结束时间,108)) else datediff(mi,'12:45:00','17:30:00') end) 有效工作时间,
sum(case when convert(varchar(8),结束时间,108) > '17:30:00' then datediff(mi,'17:30:00',convert(varchar(8),结束时间,108)) else 0 end) [大于17:30:00的工作时间]
from tb
group by 姓名
drop table tb/*
姓名 有效工作时间 大于17:30:00的工作时间
-------------------- ----------- ---------------
何林林 480 60
贺向峰 480 60
黄文艳 480 60
李静 480 60
刘鸿飞 480 60
张风苓 480 60(所影响的行数为 6 行)*/