环境是Mysql8.03,用mysql全系列都可以,可视化页面是Navicat;
因为设计使用到了循环,所以引用了Mysql存储过程实现,具体代码如下,
其中用到主要函数While,结束循环需要加END WHILE;IF a THEN b END IF;
DROP PROCEDURE if EXISTS test; # 如果存在test存储过程则删除
CREATE procedure test(in Startdate DATE,in Enddate DATE) # 创建开始和结束日期参数,名称为test
BEGIN
# 申明变量,i是自增参数,j是统计天数,iday是递增参数,ileng开始和结束时间间隔
DECLARE i INT ;DECLARE j INT;DECLARE iday DATE;DECLARE ileng INT;
SET ileng = DATEDIFF(Enddate,Startdate); # 计算开始和结束日期之间的间隔天数
SET i = 0,j=0; # 变量赋值
WHILE i<=ileng DO # 结束循环的条件: 当i大于两个时间日期差跳出while循环
SET iday=ADDDATE(Startdate,INTERVAL i DAY); # 从开始日期增加,遍历
SET i = i+1; # 循环一次,i加1
IF DAYOFWEEK(iday) In (1,2,3,4,5) THEN SET j=j+1; END IF; # 判断中间日期是否是工作日
END WHILE; # 结束while循环
SELECT j AS 日数; # 查看test表数据
END
; # 结束定义语句
CALL test('2021/01/20',DATE_FORMAT(NOW(),'%Y-%m-%d')); # 调用存储过程
效果如下: