【发布时间】:2022-11-27 22:49:31
【问题描述】:
我正在 MYSQL Workbench 中创建一个存储函数,它接受一个日期并返回该财政年度的季度。我想出了以下代码脚本。 SQL 编辑器检查语句并接受此函数没有语法错误。
CREATE FUNCTION `get_fiscal_quarter`(calendar_date DATE) RETURNS char(2)
DETERMINISTIC
BEGIN
DECLARE quart CHAR(2);
DECLARE quar CHAR(2);
SELECT CASE
WHEN MONTH(calendar_date) IN (9,10,11) THEN quart = 'Q1'
WHEN MONTH(calendar_date) IN (12,1,2) THEN quart = 'Q2'
WHEN MONTH(calendar_date) IN (3,4,5) THEN quart = 'Q3'
WHEN MONTH(calendar_date) IN (6,7,8) THEN quart = 'Q4'
END
INTO quar;
RETURN quar;
END
但是,当我尝试在 date 值上应用 get_fiscal_quarter 函数时,它返回 NULL。我哪里做错了?
我尝试使用 IF 语句,但遇到了许多与定界符相关的错误。
Statement is incomplete, expecting IF
Statement is incomplete, expecting END
delimiter is not valid at this position, expecting CREATE
我知道 MySQL Workbench 脚本编辑器在我单击应用时自动应用定界符代码,因此不接受手动提供 DELIMITER $$。但是由于这个原因,当我尝试使用;定界符和ENDCASE/IF时,我遇到了statement is incomplete语法错误的无限循环。我声明了 2 个变量以在 CASE 语句中使用来避免这些错误。但是没有得到预期的结果。
编写 CASE 和 IF 语句以在 MySQL WorkBench 中创建存储函数的正确方法是什么?搞清楚bug就这么乱?
【问题讨论】:
-
删除所有
quart =。现在您的 CASE 计算出quart = 'Qn',但quart未初始化,即它为 NULL,并且比较也返回 NULL。
标签: mysql sql case stored-functions