失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Mysql 编程实战三之计算两个日期的工作日数

Mysql 编程实战三之计算两个日期的工作日数

时间:2021-05-06 17:32:25

相关推荐

Mysql 编程实战三之计算两个日期的工作日数

Mysql 编程实战三之计算两个日期的工作日数

1.需求

求出两个日期中的工作日数。

2.实现

代码如下:

delimiter //drop procedure if exists getworkdays;create procedure getWorkDays(s datetime,e datetime)begin select (floor(days/7)*5 + days%7- case when 6 between wd and wd+days%7-1 then 1 else 0 end- case when 7 between wd and wd+days%7-1 then 1 else 0 end) as resultfrom (select datediff(e,s)+1 as days, weekday(s)+1 as wd ) as a;end //delimiter ;

3.执行结果

mysql> call getworkdays('-09-02','-09-09');+--------+| result |+--------+|5 |+--------+1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

查看日历验证

4.代码分析

编写存储过程,便于测试。存储过程命名为getWorkDays(d1,d2)先求出日期d1到d2之间的天数days【使用datediff()函数】,再求出d2所在的日期为星期几【使用weekday()函数】使用floor()函数求出days中所包含的星期数为(floor(days/7)),那么工作日数就是floor(days/7)*5。最后一步就是求出零散的工作日:days%7表示的是,当前日期被7整除后的余数,这个余数就是代表零散的天数。但是我们不能将这个零散的天数全部加上,因为这个零散的天数中可能包含着周六,周末。这就是为什么我们前面计算d2是星期几的原因。针对上述问题,后面再接上case when()语句,其中的between wd and wd+days%7-1意思就是指周六或者周末是不是在多出来的这个零散日期里。【需要注意这里的wdweekday(s)即开始时间的星期,笔者在这个位置坑了好久!!】

如果觉得《Mysql 编程实战三之计算两个日期的工作日数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。