转载:MYSQL编写两日期之间的工作日函数

感谢原链接:
https://blog.csdn.net/adayan_2015/article/details/79624387#commentBox
#公式的内容不一定准确 但是逻辑一定要搞清楚 以后不可以运行这个,条件语句不一定正确哈哈哈
DROP FUNCTION IF EXISTS workdaynum ; #注意分号
delimIter #是告诉MySQL解释器,该段命令是否已经结束了,mysql是否可以执行了 最后有相对应的
CREATE FUNCTION workdaynum (datefrom date,dateto date) #创建公式 create function 函数名(参数 类型,参数 类型)
#需要注意 创建参数以及函数名时不加引号
RETURNS INT(20) NO SQL #创建完毕,必须返回一个值 返回数据类型 但是NO SQL 不知道是什么意思
BEGIN #开始执行
DECLARE days INT DEFAULT(1); #声明变量 default DEFAULT 约束用于向列中插入默认值
#如果没有规定其他的值,那么会将默认值添加到所有的新记录。
IF (datefrom>dateto OR YEAR (datefrom) <> YEAR (dateto))
THEN RETURN -1;
END IF;
#if then return end if;
SET days = CASE
WHEN WEEK (datefrom) =WEEK (dateto) THEN
dateto-datefrom+ 1 - CASE
WHEN DAYOFWEEK( datefrom ) > 1
AND DAYOFWEEK( DATETO ) < 7 THEN
0
WHEN DAYOFWEEK( DATEFROM ) = 1
AND DAYOFWEEK( DATETO ) = 7 THEN
2
ELSE
1
END
ELSE DATETO - DATEFROM - (
WEEK ( DATETO ) - WEEK ( DATEFROM )
) * 2 - CASE
WHEN DAYOFWEEK( DATEFROM ) = 1
AND DAYOFWEEK( DATETO ) = 7 THEN
2
WHEN DAYOFWEEK( DATEFROM ) = 1
AND DAYOFWEEK( DATETO ) <> 7 THEN
1
WHEN DAYOFWEEK( DATEFROM ) <> 1
AND DAYOFWEEK( DATETO ) = 7 THEN
1
ELSE
0
END
#注意第二次声明变量时,条件语句中又包含一个条件语句,这个以后也可运用
END; #与case相对应
RETURN DAYS; #必须返回值
end$$ #与begin相对应
delimiter

上面有一处不能显示,附图如下:第一个delimiter后面必须有符号$$
在这里插入图片描述
这边标注的很仔细 是因为
1.之前没有用sql编写函数
2.没有用到条件语句中又包含条件语句的情况

所以这篇对我是个陌生且有趣的知识,以后可以运用起来。
感谢原链接
https://blog.csdn.net/adayan_2015/article/details/79624387#commentBox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值