我需要一个 MySQL 函数,它允许我通过多个工作日(周一至周五)和一个开始 DATE 或 DATETIME(对我的实现无关紧要),并让它返回一个新的 DATE 或 DATETIME 多个工作日在将来。
示例:SELECT AddWorkDays(10, "2013-09-01")
假设“2013-09-01”是星期一,则返回“2013-09-16”。
同样:SELECT AddWorkDays(-10, "2013-09-16")
返回“2013-09-01”
我为一个 MSSQL 数据库(我认为)找到了这个函数,这正是我需要的,除了它不在 MySQL 中。我试图手动将其转换为 MySQL 语法并做到了这一点:
DROP FUNCTION IF EXISTS AddWorkDays;
DELIMITER $$
CREATE FUNCTION AddWorkDays
(
WorkingDays INT,
StartDate DATE
)
RETURNS DATE
BEGIN
DECLARE Count INT;
DECLARE i INT;
DECLARE NewDate DATE;
SET Count = 0;
SET i = 0;
WHILE (i < WorkingDays) DO
BEGIN
SET Count = Count + 1;
SET i = i + 1;
WHILE DAYOFWEEK(ADDDATE(StartDate, Count)) IN (1,7) DO
BEGIN
SET Count = Count + 1;
END;
END WHILE;
END;
END WHILE;
SET NewDate = ADDDATE(StartDate, Count);
RETURN NewDate;
END;
$$
DELIMITER ;
我最终得到一个错误:
Error 1415: Not allowed to return a result set from a function
我似乎无法弄清楚它试图返回结果集的确切位置。
我的语法有错误吗?有没有更好的解决方案?
谢谢!
编辑
看来 MySQL 没有 DATEPART 或 DATEADD 函数。我在文档中看到他们有 ADDDATE 和 DAYOFWEEK。更新了代码以表示这一点。我还将 SELECT 语句更改为 SET (现在我得到原始错误的原因是有道理的)
结果,尝试通过 CF 使用该函数运行查询时出现新错误
[Table (rows 1 columns ADDWORKDAYS(10,"2013-09-01")): [ADDWORKDAYS(10,"2013-09-01"): coldfusion.sql.QueryColumn@7a010] ] is not indexable by ADDWORKDAYS(10