java考勤表导出_Sql通过存储过程生成全年日历考勤表数据

需求: 生成考勤日历表

CREATE TABLE `year_date_all` (

`id` int primary key AUTO_INCREMENT COMMENT 'id',

`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:调休工作日',

`repWeeks` varchar(50) NOT NULL COMMENT '星期(*)'

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='全年日期表';

# 创建存储过程

CREATE DEFINER=`root`@`%` 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;

DECLARE repWeeks varchar(50) DEFAULT '星期一';

# 判断数据是否存在

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;

#判断是星期几

set repWeeks = (case workOrWeek when 7 then '星期日' when 1 then '星期一' when 2 then '星期二' when 3 then '星期三' when 4 then '星期四' when 5 then '星期五' when 6 then '星期六' end);

# 写入数据

INSERT INTO year_date_all(id,repDate,repYear,repMonth,repDay,repWeek,db_status,repWeeks) VALUES(null,startDay,YEAR(startDay),MONTH(startDay),DAY(startDay),WEEKOFYEAR(startDay),db_status_,repWeeks);

SET count=count+1;

SET startDay=DATE_ADD(DATE(startDay),INTERVAL 1 DAY);

END WHILE;

END IF;

END

# 执行存储过程

call getAllYearDateFunc(2020)

# 删除存储过程

DROP PROCEDURE getAllYearDateFunc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值