我需要一个 MySQL 函数,它允许我传递多个工作日(周一至周五)和开始日期或日期时间(对我的实现来说并不重要),并让它返回一个新的日期或日期时间多个工作日将来。
例子:SELECT AddWorkDays(10, "2013-09-01")
假设“2013-09-01”是星期一,则返回“2013-09-16”。
相似地:SELECT AddWorkDays(-10, "2013-09-16")
返回“2013-09-01”
I found this http://geekswithblogs.net/RoddyCrossan/archive/2009/08/21/sql-server-function-to-add-working-days-on-to-a.aspxMSSQL 数据库的函数(我认为)这正是我所需要的,只是它不在 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
我似乎无法弄清楚它到底在哪里尝试返回结果集。
我的语法有错误吗?还有更好的解决方案吗?
Thanks!
EDIT
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