mysql - 创建一个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 行
解决方案
创建存储过程和函数时,您需要更改分隔符以便通知 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
函数的语句中,然后将分隔符恢复为;
(默认值)。
推荐阅读
- sql - 在 sql 中仅限制 '1' 和 '0' 值
- asp.net - 更新网站中的用户资料
- sql - 从表中选择所有行其中一行的 col1 = 另一行的 col2?
- mysql - 错误 1215:使用外键设计数据库
- c# - 当并非所有实例都被使用时,依赖注入是一个好主意吗?
- html - 作为表单中的块元素输入
- nlp - 使用 NLP 或深度学习从文档中提取句子
- javascript - 如何用 const 替换字符串的一部分?
- vue.js - 单击主 div 时隐藏 div,但单击子 div、href、spans 等时不隐藏
- asp.net-mvc - 控制器应该缩写吗?即 CountryController 与 CountryController