MYSQL 生成周末、节假日,日期表

1:创建日期表:

 CREATE TABLE `year_date_all` (
    `repDate` date NOT NULL COMMENT '日期',
    `repYear` int(8) NOT NULL COMMENT '年号',
    `repMonth` int(8) NOT NULL COMMENT '月',
    `repDay` int(8) NOT NULL COMMENT '天',
    `repWeek` int(8) NOT NULL COMMENT '周',
    `db_status` int(8) DEFAULT '0' COMMENT '0:工作日;1:周末休息日;2:法定休息日;3:调休工作日',
    PRIMARY KEY (`repDate`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='全年日期表';

2:创建存储过程插入函数

CREATE DEFINER=`root`@`localhost` PROCEDURE `getAllYearDateFunc`(in yaerParam int(8))
BEGIN
DECLARE count INT DEFAULT 0;
DECLARE startDay DATE ;
DECLARE yearNum INT DEFAULT 365;
DECLARE workOrWeek INT DEFAULT 1;
DECLARE yearBool INT DEFAULT 0;
DECLARE db_status_ INT DEFAULT 0;


SELECT count(*) INTO yearBool FROM year_date_all WHERE repYear=yaerParam;
IF yearBool=0 THEN
SET startDay = DATE(concat(yaerParam,'-01-01')); 

IF yaerParam  % 4 = 0 AND yaerParam  % 100 <> 0 OR yaerParam  % 400 = 0 THEN 
  SET yearNum = 366;
ELSE
  SET yearNum = 365;
END IF;

WHILE count < yearNum DO
SET  workOrWeek = DAYOFWEEK(DATE_SUB(startDay,INTERVAL 1 day));
 IF (workOrWeek)>5 THEN  
   SET db_status_=1;
     
 ELSE 
   SET db_status_=0;
 END IF;
 
 INSERT INTO year_date_all(repDate,repYear,repMonth,repDay,repWeek,db_status) VALUES(startDay,YEAR(startDay),MONTH(startDay),DAY(startDay),WEEKOFYEAR(startDay),db_status_);
 SET count=count+1;
 SET startDay=DATE_ADD(DATE(startDay),INTERVAL 1 DAY);
END WHILE;

扫描二维码关注公众号,回复: 15672949 查看本文章

END IF;
END

3:执行,输入2022

 4.运行结果

 5.节假日修改:

update year_date_all set   db_status=1
where ( DATE_FORMAT(repDate,'%Y%m%d') >='20220101'
and  DATE_FORMAT(repDate,'%Y%m%d') <='20220103')
or (DATE_FORMAT(repDate,'%Y%m%d')>='20220131'
and DATE_FORMAT(repDate,'%Y%m%d')<='20220206')
or (DATE_FORMAT(repDate,'%Y%m%d')>='20220403'
and DATE_FORMAT(repDate,'%Y%m%d')<'20220405')
or (DATE_FORMAT(repDate,'%Y%m%d')>='20220430'
and DATE_FORMAT(repDate,'%Y%m%d')<='20220504')
or (DATE_FORMAT(repDate,'%Y%m%d')>='20220603'
and DATE_FORMAT(repDate,'%Y%m%d')<='20220605')
or (DATE_FORMAT(repDate,'%Y%m%d')>='20220910'
and DATE_FORMAT(repDate,'%Y%m%d')<='20220912')
or (DATE_FORMAT(repDate,'%Y%m%d')>='20221001'
and DATE_FORMAT(repDate,'%Y%m%d')<='20221007')
;
update year_date_all set   db_status=0
where  DATE_FORMAT(repDate,'%Y%m%d') in ('20220129','20220130','20220402','20220424','20220507','20221008','20221009')

猜你喜欢

转载自blog.csdn.net/weixin_54108529/article/details/122576465