当前位置: 首页 > 面试题库 >

MySQL函数将多个工作日添加到DATETIME

劳法
2023-03-14
问题内容

我需要一个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

问题答案:

这是mysql语法的新功能:

DROP FUNCTION IF EXISTS AddWorkDays;
DELIMITER $$
CREATE FUNCTION AddWorkDays
(
    WorkingDays INT,
    StartDate DATETIME
)
RETURNS DATETIME

BEGIN
    DECLARE Count INT;
    DECLARE i INT;
    DECLARE NewDate DATETIME;
    SET Count = 0;
    SET i = 0;

    WHILE (i < WorkingDays) DO
        BEGIN
            SELECT Count + 1 INTO Count;
            SELECT i + 1 INTO i;
            WHILE DAYOFWEEK(DATE_ADD(StartDate,INTERVAL Count DAY)) IN (1,7) DO
                BEGIN
                    SELECT Count + 1 INTO Count;
                END;
            END WHILE;
        END;
    END WHILE;

    SELECT DATE_ADD(StartDate,INTERVAL Count DAY) INTO NewDate;
    RETURN NewDate;

END;
$$

DELIMITER ;


 类似资料:
  • 问题内容: 我想在提供的日期上加上5天,但计算必须跳过周末。 我已经知道如何添加5天而不跳过周末: 现在,我希望返回的值跳过周末。 目前,如果结果是, 但我希望结果是 问题答案: 试试这个: 怎么运行的: 首先,它将在您的约会上增加5天。 其次,当和5天后分别在两个星期内时,必须再添加2天。 第三,当5天后为或时,必须再添加2天。

  • 问题内容: 我正在寻找将X个月添加到JavaScript日期的最简单,最干净的方法。 我宁愿不处理这一年的过渡,也不必编写自己的函数。 有内置的东西可以做到这一点吗? 问题答案: 以下函数在JavaScript中将日期添加月份源。它考虑了年度结转和不同的月份长度: 上面的解决方案涵盖了从比目标月份更长的天数中移动一个月的极端情况。例如。 到2020年2月29日增加十二个月(应该是2021年2月28

  • 问题内容: Excel具有NETWORKDAYS()函数,该函数可查找两个日期之间的工作日数。 有人对MySQL有类似功能吗?由于假期增加了复杂性,因此该解决方案不必处理假期。 问题答案: 这个表达- 计算开始日期@S和结束日期@E之间的工作日数。 假设结束日期(@E)不早于开始日期(@S)。与DATEDIFF兼容,因为相同的开始日期和结束日期为零个工作日。忽略假期。 数字字符串的结构如下。创建一

  • 问题内容: 我是这个网站的新手,我才刚刚开始学习Java。我正在尝试将几天添加到GregorianCalendar中,但是它不起作用。在这里…(忽略顶部的块),其底部的添加日期很烦人。 感谢您阅读本文!我欢迎任何反馈… 问题答案: 这里有太多代码。用户互动过多。 从一种简单的方法开始做一件事,然后在正确的方法上解决。 这是您可能的操作方式: 一旦测试并证明了此方法,您就可以让其余的代码调用它。 更

  • 我得到了这个面板: 当我将此面板添加到jFrame时,它不会显示图表。 我很有信心,问题在于jPanel实现。 谁能给我一些指点吗。(其他面板到目前为止似乎没有问题)

  • 问题内容: SELECT x FROM SomeClass WHERE x.dateAtt BETWEEN CURRENT_DATE AND (CURRENT_DATE + 1 MONTH) 在上面的JPQL语句中,SomeClass具有memebr ,它是a 并具有注释。 我需要一种方法来做一下-在当前状态下这显然是错误的-但找不到带有JPQL的date函数的文档。 谁能指出我指向 记录JPQL