【问题标题】:Using CASE Statement in Stored Function MySQL在存储函数 MySQL 中使用 CASE 语句
【发布时间】: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


【解决方案1】:
CREATE FUNCTION `get_fiscal_quarter`(calendar_date DATE) 
RETURNS char(2) 
DETERMINISTIC
RETURN CASE WHEN MONTH(calendar_date) IN (9,10,11) THEN  'Q1'
            WHEN MONTH(calendar_date) IN (12,1,2)  THEN  'Q2'
            WHEN MONTH(calendar_date) IN (3,4,5)   THEN  'Q3'
            WHEN MONTH(calendar_date) IN (6,7,8)   THEN  'Q4'
            END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2011-04-29
    • 2019-07-23
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多