You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建判断闰年的SQL存储函数遇语法错误,请求排查问题

解决MariaDB闰年判断函数的语法与逻辑问题

嘿,我来帮你搞定这个报错的闰年函数!从你给出的错误信息和代码片段来看,主要是几个语法细节和逻辑完整性的问题,咱们一步步修正:

问题排查点

  • 重复声明变量:你已经把ENTER_YEAR作为函数的输入参数定义了,却在BEGIN块里又重复声明了同名变量,这会触发语法冲突,必须删掉这个多余的DECLARE ENTER_YEAR INTEGER;语句。
  • IF语句不完整:你的代码里If (Enter...没有写完,不仅缺少完整的闰年判断逻辑,还没给IF分支加闭合的END IF;,这是导致1064语法错误的核心原因之一。
  • 字符串引号使用不当:MySQL/MariaDB里字符串常量的标准用法是单引号,双引号可能因配置问题失效,建议统一用单引号包裹字符串。

修正后的完整函数代码

DELIMITER $$
DROP FUNCTION IF EXISTS f_Leap_Year;
CREATE FUNCTION f_Leap_Year(ENTER_YEAR INT) 
RETURNS VARCHAR(30)
BEGIN
    DECLARE Answer VARCHAR(30);
    -- 标准闰年判断逻辑:能被4整除但不能被100整除,或能被400整除
    IF (ENTER_YEAR % 4 = 0 AND ENTER_YEAR % 100 != 0) OR (ENTER_YEAR % 400 = 0) THEN
        SET Answer = 'Leap Year';
    ELSE
        SET Answer = 'Not a Leap Year';
    END IF; -- 闭合IF分支
    RETURN Answer;
END $$
DELIMITER ; -- 切回默认的SQL语句分隔符

关键修正说明

  1. 移除了重复的变量声明,避免参数与局部变量重名冲突
  2. 补全了标准闰年判断逻辑,覆盖了所有闰年场景(比如2000是闰年,1900不是)
  3. 用单引号替换双引号,符合SQL语法规范
  4. 补充了END IF;闭合IF语句,END $$闭合函数体,最后恢复默认分隔符

你可以通过以下语句测试函数:

-- 测试闰年
SELECT f_Leap_Year(2024);
-- 测试非闰年
SELECT f_Leap_Year(2023);

内容的提问来源于stack exchange,提问作者ElTttt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:35:22