一、demo脚本
DROP FUNCTION IF EXISTS `DATEDIFF_NOWEEKEND`;
delimiter ||
CREATE FUNCTION `DATEDIFF_NOWEEKEND`(expr1 DATE,expr2 DATE) RETURNS mediumtext CHARSET utf8
BEGIN
DECLARE tmp_days INT DEFAULT 0;
DECLARE tmp_date1 DATE DEFAULT NULL;
DECLARE tmp_date2 DATE DEFAULT NULL;SET tmp_date1=DATE_FORMAT(expr1,'%Y-%m-%d');
SET tmp_date2=DATE_FORMAT(expr2,'%Y-%m-%d');IF tmp_date1>tmp_date2 THEN
WHILE tmp_date1>tmp_date2 DO
SET tmp_days=tmp_days+IF(WEEKDAY(tmp_date1)>=5,0,1);
SET tmp_date1=DATE_SUB(tmp_date1,INTERVAL 1 DAY);
END WHILE;
ELSEIF tmp_date1<tmp_date2 THEN
WHILE tmp_date1<tmp_date2 DO
SET tmp_days=tmp_days-IF(WEEKDAY(tmp_date1)>=5,0,1);
SET tmp_date1=DATE_ADD(tmp_date1,INTERVAL 1 DAY);
END WHILE;
END IF;RETURN tmp_days;
END ||
delimiter;SET @date1='2022-03-11';
SET @date2='2022-03-14';
SELECT DATEDIFF(@date1,@date2),DATEDIFF_NOWEEKEND(@date1,@date2);