首页 > 解决方案 > 创建一个mysql函数来操作日期

问题描述

我想在 mysql 5.7 中创建一个函数,它接收两个日期并检查是否存在差异。如果是,则应在第二个日期上增加一天并返回。如果不是,它应该返回日期而不进行任何操作。

不幸的是,每次我想保存函数时都会收到语法错误(使用具有完整权限的 TablePlus)。

我的功能:

CREATE FUNCTION `CheckCreatedAt`(timeStart DATETIME, timeEnd DATETIME) RETURNS datetime
BEGIN 
    DECLARE newDate DATETIME;

    IF TIMESTAMPDIFF(DAY, timeStart, timeEnd) != 0 
    THEN 
        SET newDate = DATE_ADD(timeEnd, INTERVAL 1 DAY);
​   ELSE 
        SET newDate = timeEnd;
    END IF;

    RETURN newDate;
END

错误消息:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'ELSE SET newDate = timeEnd; 附近使用的正确语法;万一;

返回新日期;END' 在第 6 行

标签: mysqlmysql-function

解决方案


创建存储过程和函数时,您需要更改分隔符以便通知 MySQL 您的代码在哪里结束。

这是使用DELIMITER命令实现的。例如:

DELIMITER $$

将分隔符更改为双美元。

将您的代码修改为以下内容,它将创建您的函数(除非出现其他语法错误):

DELIMITER $$
CREATE FUNCTION `CheckCreatedAt`(timeStart DATETIME, timeEnd DATETIME) RETURNS datetime
BEGIN 
    DECLARE newDate DATETIME;

    IF TIMESTAMPDIFF(DAY, timeStart, timeEnd) != 0 THEN
        SET newDate = DATE_ADD(timeEnd, INTERVAL 1 DAY);
 ​   ELSE 
        SET newDate = timeEnd;
    END IF;

    RETURN newDate;
END$$
DELIMITER ;

这会将分隔符更改为$$,添加$$END函数的语句中,然后将分隔符恢复为;(默认值)。


推荐阅读