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

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