create function time_span_of_minutes(
start_day datetime,
end_day datetime)
returns float
begin
-- 返回按分钟计算两段时间的间隔,采用逐日靠近的方法求解,一天按8小时480分钟计算,周末不计,不考虑法定节假日。
-- 如果起始日期在周末,则计算当天时间。
declare minutes float;
declare next_day datetime;
set minutes=0.0;
set next_day=start_day;
if(timestampdiff(day,start_day,end_day)
set minutes=minutes+timestampdiff(minute,start_day,end_day);
else
while timestampdiff(day,next_day,end_day)>=1.0 do
if ((dayofweek(next_day)=7) or (dayofweek(next_day)=1)) then
set next_day=next_day+interval 1 day;
else
set next_day=next_day+interval 1 day;
set minutes=minutes+480.0;
end if;
end while;
set minutes=minutes+timestampdiff(minute,next_day,end_day);
if ((dayofweek(start_day)=7) or (dayofweek(start_day)=1)) then
set minutes=minutes+timestampdiff(minute,start_day,convert(concat(substring(start_day from 1 for 10),' 17:30:00'),datetime));
end if;
end if;
return minutes;
end;
create function time_span_of_minutes(
start_day datetime,
end_day datetime)
returns float
begin
-- 返回按分钟计算两段时间的间隔,采用逐日靠近的方法求解,一天按8小时480分钟计算,周末不计,不考虑法定节假日。
-- 如果起始日期在周末,则计算当天时间。
declare minutes float;
declare next_day datetime;
set minutes=0.0;
set next_day=start_day;
if(timestampdiff(day,start_day,end_day)
set minutes=minutes+timestampdiff(minute,start_day,end_day);
else
while timestampdiff(day,next_day,end_day)>=1.0 do
if ((dayofweek(next_day)=7) or (dayofweek(next_day)=1)) then
set next_day=next_day+interval 1 day;
else
set next_day=next_day+interval 1 day;
set minutes=minutes+480.0;
end if;
end while;
set minutes=minutes+timestampdiff(minute,next_day,end_day);
if ((dayofweek(start_day)=7) or (dayofweek(start_day)=1)) then
set minutes=minutes+timestampdiff(minute,start_day,convert(concat(substring(start_day from 1 for 10),' 17:30:00'),datetime));
end if;
end if;
return minutes;
end;
没考虑中午休息时间
摘自 jasper键盘舞步
bitscn.com