感谢原链接:
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