mysql - DATE_ADD 和 INTERVAL 函数中的语法错误

标签 mysql function date

鉴于此功能:

DROP FUNCTION IF EXISTS expiration_date;
DELIMITER $$
CREATE FUNCTION expiration_date(lic_class VARCHAR(2), born_on DATE, at DATE) RETURNS DATE
BEGIN
    DECLARE age INTEGER;
    DECLARE span INTEGER DEFAULT 0;
    SET age = YEAR(at) - YEAR(born_on);
    IF     age < 50                 THEN SET span = 10;
    ELSEIF age >= 50 AND age < 70   THEN SET span = 5;
    ELSEIF age >= 70 AND age < 80   THEN SET span = 3;
    ELSEIF age >= 80                THEN SET span = 2;
    END IF;

    DECLARE ret DATE;
    SET ret = DATE_ADD(at, INTERVAL span YEAR); 
    RETURN ret;
END $$
DELIMITER ;

它给了我:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE ret DATE; SET ret = DATE_ADD(at, INTERVAL span YEAR); RETURN' at line 12

这是为什么呢?我错过了什么?

最佳答案

根据to the DECLARE documentation

DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements.

因此,将DECLARE ret DATE;放在IF...ELSE block 之后是无效的。将其与其他 DECLARE 声明一起移至顶部。

DROP FUNCTION IF EXISTS expiration_date;
DELIMITER $$
CREATE FUNCTION expiration_date(lic_class VARCHAR(2), born_on DATE, at DATE) RETURNS DATE
BEGIN
    DECLARE age INTEGER;
    DECLARE span INTEGER DEFAULT 0;
    -- No reason not to DECLARE up here!
    DECLARE ret DATE;

    SET age = YEAR(at) - YEAR(born_on);
    IF     age < 50                 THEN SET span = 10;
    ELSEIF age >= 50 AND age < 70   THEN SET span = 5;
    ELSEIF age >= 70 AND age < 80   THEN SET span = 3;
    ELSEIF age >= 80                THEN SET span = 2;
    END IF;

    SET ret = DATE_ADD(at, INTERVAL span YEAR); 
    RETURN ret;
END $$
DELIMITER ;

关于mysql - DATE_ADD 和 INTERVAL 函数中的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24582112/

相关文章:

mysql - 从同一个表中选择两列匹配而第三列不匹配的表

c - 将多个值从一个函数返回到另一函数

python - 仅从 tsv 中的列索引生成 "special"字典结构

python - 根据 pandas 时间序列中的某天设置值

PHP 提交表单到电子邮件复选框

php - Php Web应用程序始终显示错误消息

JavaScript: "undefined"变量值

php - 使用 PHP 和 AJAX 计算日期选择器的日期

r - 更改日期格式时如何将向量保留为 R 中的日期类

python - 无法创建 mysql 数据库 python ("can' t 连接到服务器 localhost")