求一个计算时间的函数

wjgwrn 2008-12-19 07:56:00
有一个表:
CREATE TABLE [dbo].[Worktime] (
[I_D] [int] NOT NULL ,
[Bc] [smallint] NOT NULL , --班次
[SbTime] [datetime] NOT NULL , --上班时间
[XbTime] [datetime] NOT NULL --下班时间
) ON [PRIMARY]

数据:
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(1,0,'08:00',11.30)
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(2,0,'12:30',20.00) --与上记录的时间间隔是吃饭时间
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(3,1,'20:00',23.30)
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(4,1,'00:30',08.00) --与上记录的时间间隔是吃饭时间
@Time1 =2008-12-01 21:20 --任务开始时间
@Time2 =2008-12-10 04:45 --任务结束时间

求一个函数,计算任务有效工作的小时数,即去掉吃饭时间的工作小时数
...全文
304 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjgwrn 2009-09-25
  • 打赏
  • 举报
回复
好久没上了,又没有正确答案,所以时间长了,有人给个基本正确的答案吗,差不多就结了。
soft_wsx 2009-09-25
  • 打赏
  • 举报
回复
楼主你结贴周期好长!
wjgwrn 2009-09-25
  • 打赏
  • 举报
回复
这么长时间没解决,正确结果应该是203.4,
从'2008-12-01 21:20' 到 '2008-12-09 21:20' 整8天

每整体的有效工作的小时数是22
08:00 到 11:30' 3.5h
12:30 到 20:00' 7.5h
20:00 到 23:30' 3.5h
00:30 到 08:00' 7.5h

共8*22=196小时
从'2008-12-09 21:20' 到'2008-12-10 04:45' 共7小时25分即7.4小时
196+7.4=203.4
还有答案吗,谢谢
等不到来世 2008-12-26
  • 打赏
  • 举报
回复
CREATE TABLE [dbo].[Worktime] ( 
[I_D] [int] NOT NULL ,
[Bc] [smallint] NOT NULL , --班次
[SbTime] [datetime] NOT NULL , --上班时间
[XbTime] [datetime] NOT NULL --下班时间
) ON [PRIMARY]
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(1,0,'2008-12-01 08:00','2008-12-01 11:30')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(2,0,'2008-12-01 12:30','2008-12-01 20:00')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(3,1,'2008-12-01 20:00','2008-12-01 23:30')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(4,1,'2008-12-02 00:30','2008-12-02 08:00')

insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(5,0,'2008-12-02 08:00','2008-12-02 11:30')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(6,0,'2008-12-02 12:30','2008-12-02 20:00')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(7,1,'2008-12-02 20:00','2008-12-02 23:30')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(8,1,'2008-12-03 00:30','2008-12-03 08:00')

--select * from Worktime

declare @Time1 datetime,@Time2 datetime
set @Time1 ='2008-12-01 21:20' --任务开始时间
set @Time2 ='2008-12-10 04:45' --任务结束时间

select 总有效时间=cast(sum(datediff(n,case when SbTime<@Time1 then @Time1 else SbTime end,case when XbTime>@Time2 then @Time2 else XbTIme end))/60.0 as decimal(18,1))
from Worktime
where XbTime>@Time1 and SbTime<@Time2
/*
总有效时间
---------------
31.7
*/
bluefangxiao 2008-12-23
  • 打赏
  • 举报
回复


select bc,convert(varchar(10),sbtime,120) as date ,sum(datediff(hh,sbtime,xbtime))as time from worktime
group by bc,convert(varchar(10),sbtime,120)

bluefangxiao 2008-12-23
  • 打赏
  • 举报
回复

select bc,sum(datediff(hh,sbtime,xbtime))from worktime
group by bc,convert(varchar(10),sbtime,120)



shizheyangde 2008-12-23
  • 打赏
  • 举报
回复
总时间:
SELECT SUM (Datediff("h", SbTime, XbTime)) FROM Worktime where XbTime IS NOT NULL and SbTime IS NOT NULL
每个班次的时间:

SELECT SUM (Datediff("h", SbTime, XbTime)) FROM Worktime where XbTime IS NOT NULL and SbTime IS NOT NULL group by Bc
wjgwrn 2008-12-23
  • 打赏
  • 举报
回复
可能问题没有表达清楚,表中的内容,是每天的工作日历,要求的是:给定一个任务的时间段,如:
@Time1 =2008-12-01 21:20 --任务开始时间
@Time2 =2008-12-10 04:45 --任务结束时间 (注意时间是跨日的)
在这段时间内的有效工作小时数(跑去非工作时间的小时数)
mengxj85 2008-12-19
  • 打赏
  • 举报
回复
帮顶
ygyjack 2008-12-19
  • 打赏
  • 举报
回复
SELECT SUM (Datediff("h", SbTime, XbTime)) FROM Worktime where XbTime IS NOT NULL and SbTime IS NOT NULL;
wjgwrn 2008-12-19
  • 打赏
  • 举报
回复
insert语句表示了数据的含义有语法错误,不好意思

insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(1,0,'1899-12-30 08:00','1899-12-30 11:30')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(2,0,'1899-12-30 12:30','1899-12-30 20:00') --与上记录的时间间隔是吃饭时间
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(3,1,'1899-12-30 20:00','1899-12-30 23:30')
insert into Worktime (I_D,Bc,SbTime,XbTime)VALUES(4,1,'1899-12-30 00:30','1899-12-30 08:00') --与上记录的时间间隔是吃饭时间

只取其中的时间
wjgwrn 2008-12-19
  • 打赏
  • 举报
回复
是的,任何日期的时间段都一样
pt1314917 2008-12-19
  • 打赏
  • 举报
回复
表里的时间只有时间,没有日期?

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧