如何取工作时间的分钟。

qianduo 2013-03-26 11:27:24
例如2013-3-26 8:30 到2013-3-26 9:30 这个是只有30分钟
例如2013-3-25 8:30 到2013-3-26 9:30 这个是只有360分钟

如何写这个函数。
...全文
150 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2013-03-26
  • 打赏
  • 举报
回复
跨天就加点。 把日期和工作时间拼上去。
fcuandy 2013-03-26
  • 打赏
  • 举报
回复
引用 8 楼 qianduo 的回复:
上班时间是9:00-12:00 1:30-16:00
6个时间点之间的datediff 的累加。 这样说够明确么?
qianduo 2013-03-26
  • 打赏
  • 举报
回复
上班时间是9:00-12:00 1:30-16:00
qianduo 2013-03-26
  • 打赏
  • 举报
回复
上班时间之外不计算在内。
bichir 2013-03-26
  • 打赏
  • 举报
回复
create function getMinutes(@start varchar(20),@end varchar(20)) returns varchar(10) as begin declare @dd varchar(10) set @dd=datediff(n,@start,@end) return @dd end select dbo.getMinutes('2012-10-10 20:10:10','2013-11-20 00:00:10')
zbdzjx 2013-03-26
  • 打赏
  • 举报
回复
引用 1 楼 szm341 的回复:
你这咋算的啊。。
我也沒看明白,第一個是1小時,結果變成30分鐘。第二個是25小時,變成360分鐘(6小時)。
chuanzhang5687 2013-03-26
  • 打赏
  • 举报
回复
楼主写的需求太模糊 上班时间是9点开始? 一个工作日是多长时间?
昵称被占用了 2013-03-26
  • 打赏
  • 举报
回复
select datediff(mi,'2013-3-26 8:30','2013-3-26 9:30')
szm341 2013-03-26
  • 打赏
  • 举报
回复
你这咋算的啊。。
chuanzhang5687 2013-03-26
  • 打赏
  • 举报
回复
引用 12 楼 qianduo 的回复:
我自己写的一个函数……整了一个早上…… 大家帮忙看下,这样写有啥问题不。
这个。。。 那要看你还要不要考虑 国家法定节假日了
chuanzhang5687 2013-03-26
  • 打赏
  • 举报
回复
引用 11 楼 qianduo 的回复:
alter FUNCTION [dbo].[fn_WorkHour]( @dt_begin datetime, --计算的开始日期 @dt_end datetime --计算的结束日期 )RETURNS int AS BEGIN if (@dt_begin>@dt_end) RETURN 0 ……
qianduo 2013-03-26
  • 打赏
  • 举报
回复
我自己写的一个函数……整了一个早上…… 大家帮忙看下,这样写有啥问题不。
qianduo 2013-03-26
  • 打赏
  • 举报
回复
alter FUNCTION [dbo].[fn_WorkHour]( @dt_begin datetime, --计算的开始日期 @dt_end datetime --计算的结束日期 )RETURNS int AS BEGIN if (@dt_begin>@dt_end) RETURN 0 DECLARE @workhour int,@beginday int ,@endday int SET @beginday=0 SET @endday=0 set @workhour=0 WHILE day(@dt_begin)<day(@dt_end) BEGIN --如果是非工作日则跳过 if(DateName(WEEKDAY ,@dt_begin)='星期六' or DateName(WEEKDAY ,@dt_begin)='星期日') begin set @dt_begin=dateadd(dd,1,@dt_begin) CONTINUE end --如果明天的开始日期等于结束日期,且大于明天16:00,那么就直接设初始值为明早上9:00 if (day(dateadd(dd,1,@dt_begin))= day(@dt_end) and dateadd(dd,1,@dt_begin)>=convert(datetime,convert(varchar(10),@dt_end,120)+' 16:00')) set @dt_begin=convert(datetime,convert(varchar(10),dateadd(dd,1,@dt_begin),120)+' 9:00') else begin set @dt_begin=dateadd(dd,1,@dt_begin) set @workhour=@workhour+330 end END DECLARE @date9 datetime DECLARE @date12 datetime DECLARE @date13 datetime DECLARE @date16 datetime set @date9=convert(datetime,convert(varchar(10),@dt_begin,120)+' 9:00') set @date12=convert(datetime,convert(varchar(10),@dt_begin,120)+' 12:00') set @date13=convert(datetime,convert(varchar(10),@dt_begin,120)+' 13:30') set @date16=convert(datetime,convert(varchar(10),@dt_begin,120)+' 16:00') --如果开始时间是在早上九点以前或者是在晚上16点以后,则不计算。 if (@dt_begin<@date9 or @dt_begin>@date16) set @beginday=0 else begin --如果时间是在上午 if (@dt_begin<=@date12) set @beginday=DATEDIFF(Minute ,@date9,@dt_begin) --如果时间是在中午 if (@dt_begin>@date12 and @dt_begin<@date13) set @beginday=180 --如果时间是在下午 if (@dt_begin>=@date13) set @beginday=330-DATEDIFF(Minute ,@dt_begin,@date16) end --如果开始时间是在早上九点以前或者是在晚上16点以后,则不计算。 if (@dt_end<@date9 or @dt_end>@date16) set @endday=0 else begin --如果时间是在上午 if (@dt_end<=@date12) set @endday=DATEDIFF(Minute ,@date9,@dt_end) --如果时间是在中午 if (@dt_end>@date12 and @dt_end<@date13) set @endday=180 --如果时间是在下午 if (@dt_end>=@date13) set @endday=330-DATEDIFF(Minute ,@dt_end,@date16) end RETURN @workhour-@beginday+@endday end --测试 --select dbo.fn_WorkHour('2013-3-15 9:00','2013-3-18 10:00') --390 --select dbo.fn_WorkHour('2013-3-15 9:00','2013-3-15 10:00') --60 --select dbo.fn_WorkHour('2013-3-14 19:00','2013-3-15 10:00') --60

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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