MySql计算两个日期之间的工作日(支持跨年)

*--*  计算两个日期工作日 不包含跨年的 

DROP FUNCTION IF EXISTS `workdaynum`;
DELIMITER $$
CREATE FUNCTION `WORKDAY`(`startdate` date,`enddate` date) 
RETURNS int(20) NO SQL
BEGIN
    #起始时间大于结束时间,直接返回-1,表示不支持
    if (startdate > enddate) then
       return -1;
    #同一年的情况下,直接使用上面的WORKDAYSONEYEAR()函数计算
    ELSEIF (year(startdate) = year(enddate)) then
            set @days = workdaynums(startdate,enddate);
            return @days;
    #年份相差一年,分两段进行处理    
    ELSEIF (year(startdate) < year(enddate)) then
        set @yearofstartdate = year(startdate);
        set @yearofenddate = year(enddate);
        set @lastdayofstartdate = CONCAT(@yearofstartdate,'-12-31');
        set @intervelone = workdaynums(startdate,@lastdayofstartdate);
        set @days = @intervelone;
        set @firstdayofenddate = CONCAT(@yearofenddate,'-01-01');
        set @interveltwo = workdaynums(@firstdayofenddate,enddate);
        set @days = @intervelone + @interveltwo;
    end if;
    
    RETURN @days;
end$$
DELIMITER ;

*--*  包含跨年

DROP FUNCTION IF EXISTS `workdaynum`;
DELIMITER $$
CREATE FUNCTION `WORKDAYS`(`startdate` date,`enddate` date) 
RETURNS int(20) NO SQL
BEGIN
    #起始时间大于结束时间,直接返回-1,表示不支持
    if (startdate > enddate) then
       return -1;
    #同一年的情况下,直接使用上面的WORKDAYSONEYEAR()函数计算
    ELSEIF (year(startdate) = year(enddate)) then
            set @days = workdaynum(startdate,enddate);
            return @days;
    #年份相差一年,分两段进行处理    
    ELSEIF (year(startdate) < year(enddate)) then
        set @yearofstartdate = year(startdate);
        set @yearofenddate = year(enddate);
        set @lastdayofstartdate = CONCAT(@yearofstartdate,'-12-31');
        set @intervelone = workdaynum(startdate,@lastdayofstartdate);
        set @days = @intervelone;
        set @firstdayofenddate = CONCAT(@yearofenddate,'-01-01');
        set @interveltwo = workdaynum(@firstdayofenddate,enddate);
        set @days = @intervelone + @interveltwo;
    end if;
    
    RETURN @days;
end$$
DELIMITER ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值