mudn2 2021-06-02 09:31 采纳率: 100%
浏览 95
已采纳

菜鸟遇到日期判断问题跪求大神协助

各位大神和老师,请问一下,以下问题能不能用python/SQL/VBA/其它任何语言代码,只要能解决一下。
“根据上面图标红色那两列判断有没有超时,规则为:
1、工作日内4小时内审批完才算不超时 
2、剔除时间包括双休日、节假日、中午12:00-13:30,晚上18:00-早上8:30,双休日和节假日如果不能系统判断就手动创建集合”
最终也需要将结果输出到EXCEL表对应的同一行上,跪求操作方式和代码。(之前用EXCEL函数算的,太麻烦还总有漏的地方,比如两个日期有一个是节假日的时候)

  • 写回答

4条回答 默认 最新

  • CSDN专家-文盲老顾 2021-06-02 12:25
    关注
    ALTER FUNCTION [dbo].[节假日用时] 
    (
    	@s datetime,@e datetime
    )
    RETURNS int
    AS
    BEGIN
    	DECLARE @result int,@min int,@p int
    
    	SELECT @result = 0,@min = DATEDIFF(minute,@s,@e)
    	set @p=(@min-1)/2048+1
    
    	;with t as (
    		select a.number+b.number*2048 as n 
    		from (
    			select number 
    			from master..spt_values
    			where type='p'
    		) a
    		,(
    			select number 
    			from master..spt_values
    			where type='p' and number<@p
    		) b
    	)
    	select @result = (
    		select COUNT(0) 
    		from (
    			select *,(case 
    				-- <510 分钟表示为8:30之前
    				when pass_min<510 
    				then 0
    				-- >1080 分钟表示为18:00之后
    				when pass_min>=1080 
    				then 0
    				-- 720-810表示 12:00-13:30
    				when pass_min>=720 and pass_min<810 
    				then 0
    				-- 节假日自行建立holidy表
    				--when 上班='否'
    				--then 0
    				-- weekday 1、7 表示周六日
    				when DATEPART(WEEKDAY,curr_day) in (1,7) 
    				--and 上班='否'
    				then 0
    				else 1
    				end
    			) as 工时
    			from (
    				select *,DATEDIFF(minute,curr_day,curr_minute) as pass_min
    					--,isnull(b.是否上班,'否') as 上班 
    				from (
    					select DATEADD(minute,n,@s) as curr_minute
    						,CONVERT(date,DATEADD(minute,n,@s)) as curr_day
    					from t 
    					where n<@min
    				) a
    				--left join holiday b on DATEPART(year,curr_day)=b.year and DATEPART(month,curr_day)=b.month and DATEPART(day,curr_day)=b.day
    			) a
    		) a
    		where 工时=0
    	)
    
    	RETURN @result
    
    END
    

    上边那个太繁琐了,换了个计算方式,最后 工时=0 ,统计非用工时间分钟数,工时=1,统计用工时间分钟数

    =0是上边的sql不用改,=1,就直接去掉个字段,这个值就可以作为用时分钟使用,非用工用时就用不到了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来