【发布时间】:2022-11-18 02:45:59
【问题描述】:
我正在尝试创建一个函数来检查日期范围 A 和 B 之间的任何日期是否位于日期范围 C 和 D 之间。 每当我尝试运行 MySQL Workbench 函数时,总是会抛出错误代码:2013 在查询期间丢失与 MySQL 服务器的连接。我假设这个错误是由于循环永远运行而引起的(如果我认为它完全错误,请纠正我)。
表格代码:
CREATE TABLE TESTING(
LeaveStart DATE,
LeaveEnd DATE,
ProjectStart DATE,
ProjectEnd DATE,
Det BOOL,
ID INT);
值插入代码:
INSERT INTO TESTING VALUES('2018-01-01','2018-01-31','2018-01-10','2018-01-30',FALSE,1);
INSERT INTO TESTING VALUES('2018-01-01','2018-01-31','2018-01-10','2018-01-30',FALSE,2);
功能 :
DELIMITER //
CREATE FUNCTION SALARY_DEDUCTION (LeaveStart Date, LeaveEnd Date, ProjectStart DATE, ProjectEnd Date)
RETURNS BOOL NO SQL
DETERMINISTIC
BEGIN
DECLARE DET BOOL DEFAULT FALSE;
DECLARE DT DATE DEFAULT LeaveStart;
WHILE LeaveStart < LeaveEnd DO
IF DT BETWEEN ProjectStart AND ProjectEnd THEN
SET DET = TRUE;
ELSE
SET DET = FALSE;
SET DT = DATE_ADD(DT, INTERVAL 1 DAY);
END IF;
END WHILE;
RETURN DET;
END ; //
DELIMITER ;
呼叫/司机代码:
UPDATE TESTING AS T
SET
T.Det = SALARY_DEDUCTION(T.LeaveStart,T.LeaveEnd,T.ProjectStart,T.ProjectEnd)
WHERE
T.ID=1;
注意:驱动程序代码可能会抛出错误代码 1175:安全更新,可以在驱动程序代码之前使用 SET SQL_SAFE_UPDATES=0 将其禁用。如果有人也可以解释为什么会抛出错误,那就太好了。
【问题讨论】:
标签: mysql sql mysql-workbench mysql-8.0 mysql-function