gpt4 book ai didi

mysql - 从存储函数中的 DATE_SUB/DATE_ADD 返回值

转载 作者:行者123 更新时间:2023-11-29 07:04:51 25 4
gpt4 key购买 nike

我正在尝试编写一个存储函数,该函数接受正确 ISO 格式 (yyyy-mm-dd) 的字符串,并从中减去一定数量的工作日。基于this question here我已经尝试了接受的答案以及一些做不同事情的答案,但是,它们都只是说如何编写纯sql,并且没有函数的示例。

我目前拥有的是:

delimiter //
CREATE DEFINER=`root`@`localhost` FUNCTION `WEEKDATE_SUB` (days TINYINT, date_val VARCHAR(16))
RETURNS DATE DETERMINISTIC
BEGIN
DECLARE SUBVAL INT;
DECLARE dow INT;
CASE
WHEN dow=1 THEN SET SUBVAL = (days +(FLOOR((days-0.5)/5)+1)*2 - 1);
WHEN dow=2 THEN SET SUBVAL = (days +(FLOOR((days-0.5)/5)+1)*2);
WHEN dow=3 THEN SET SUBVAL = (days-1 +(FLOOR(((days-1)-0.5)/5)+1)*2 + 1);
WHEN dow=4 THEN SET SUBVAL = (days-2 +(FLOOR(((days-2)-0.5)/5)+1)*2 + 2);
WHEN dow=5 THEN SET SUBVAL = (days-3 +(FLOOR(((days-3)-0.5)/5)+1)*2 + 3);
WHEN dow=6 THEN SET SUBVAL = (days-4 +(FLOOR(((days-4)-0.5)/5)+1)*2 + 4);
WHEN dow=7 THEN SET SUBVAL = (days-5 +(FLOOR(((days-5)-0.5)/5)+1)*2 + 5);
END CASE
RETURN DATE_SUB(date_val, INTERVAL SUBVAL DAY);
END;//

当我尝试添加它时,我收到一个模糊的错误(正如 mysql 喜欢提供的那样): 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在 'RETURN DATE_SUB(date_val, INTERVAL SUBVAL DAY); 附近使用的正确语法。 END' 在第 14 行

我尝试了几种返回方法,包括尝试为 Date sub 定义一个变量并返回它,但它几乎是相同的错误。

在函数之外,我知道这是有效的,所以看起来我应该能够返回它。

SELECT DATE_SUB("2016-01-01", INTERVAL 4 DAY);

最佳答案

文档建议您需要 END CASE ,而不是 END

此外,如果您使用 CASE expr WHEN value2 THEN .... WHEN value2 THEN ... END CASE 版本,存储函数的执行速度可能会更快一些,因为它不必重复 DAYOFWEEK 函数调用可能 7 次。

关于mysql - 从存储函数中的 DATE_SUB/DATE_ADD 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42143911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com