计算2个日期的差值,并排除周六周天的函数
DECLARE startDay DATE DEFAULT null;
DECLARE enddate DATE DEFAULT null;
-- DECLARE diff_days Int DEFAULT null;
DECLARE startDay_add DATE DEFAULT null;
DECLARE enddate_minus DATE DEFAULT null;
DECLARE num1 INT DEFAULT null; -- 2者之间的差值计算
DECLARE num2 INT DEFAULT null;
-- 起始时间
set @startDay = InDay;
-- 年底结束时间
set @enddate = last_day( date_format( now( ), '%Y-12-31' ));
-- 开始时间到结束时间的差值
-- set @diff_days = timestampdiff( day, now(), last_day( date_format( now( ), '%Y-12-31' ) ) )+1 ;
-- 开始时间的本周末日期(开始时间+)
set @startDay_add = date_sub(@startDay,INTERVAL (DATE_FORMAT(@startDay,'%w')-7) day);
-- 结束时间上周末的日期
set @enddate_minus = DATE_SUB(@enddate,INTERVAL DATE_FORMAT(@enddate,'%w') day);
-- 整数周的差值天数
set @num1 = timestampdiff(day,@startDay_add,@enddate_minus)/7*5;
-- 计算总天数(除周六、周天)
set @num2 =
CASE
WHEN DATE_FORMAT(@startDay,'%w') < 6 and DATE_FORMAT(@enddate,'%w') = 6 THEN @num1 + (5-DATE_FORMAT(@startDay,'%w')) + DATE_FORMAT(@enddate,'%w') -1
WHEN DATE_FORMAT(@startDay,'%w') < 6 and DATE_FORMAT(@enddate,'%w') = 7 THEN @num1 + (5-DATE_FORMAT(@startDay,'%w')) + DATE_FORMAT(@enddate,'%w') -2
WHEN DATE_FORMAT(@startDay,'%w') >= 6 and DATE_FORMAT(@enddate,'%w') < 6 THEN @num1 + DATE_FORMAT(@enddate,'%w')
WHEN DATE_FORMAT(@startDay,'%w') >= 6 and DATE_FORMAT(@enddate,'%w') = 6 THEN @num1 + DATE_FORMAT(@enddate,'%w') -1
WHEN DATE_FORMAT(@startDay,'%w') >= 6 and DATE_FORMAT(@enddate,'%w') = 7 THEN @num1 + DATE_FORMAT(@enddate,'%w') -2
ELSE -- 开始时间<=周五,结束时间<=周五
@num1 + (5-DATE_FORMAT(@startDay,'%w')) + DATE_FORMAT(@enddate,'%w')
END
;
RETURN @num2;
END