mysql算两个日期之间的工作日

-- 设定日期表起止参数
set @date1='2013/01/01';
set @date2='2015/12/31';

-- 建立日期表
CREATE TABLE calendar
(day DATE NOT NULL primary key,
holiday INT(11) NOT NULL DEFAULT '0'
dow int(11) not null);
truncate calendar;

-- 建立存储过程,以便循环给日期表加入数据
delimiter $$
drop procedure if exists test;
create procedure test()
begin
declare tday date;
set tday=@date1;
while (tday <= @date2) do
 insert into calendar(day) values(tday);
 set tday=date_add(tday,interval 1 day);
end while;
end$$

-- 调用存储过程加数据
call test();

-- 把星期几算进去
update calendar set dow=dayofweek(day)-1;
update calendar set dow=7 where dow=0;

 

set @date1='2014/04/01';
set @date2='2014/04/30';

-- 利用日期表来获取两个日期之间的工作日,
-- 如果hol=0,则判断是不是周6,7 是则不算,不是则算工作日数+1;
-- hol=1 是假期(不用管是不是周6,7);
-- hol=2 是工作日,工作日数+1
SELECT COUNT(*) FROM calendar
WHERE day BETWEEN @date1 AND @date2
AND ((DAYOFWEEK(day) NOT IN(1,7) AND holiday=0) or holiday=2);

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值