创建调用MySQL生成前n项斐波那契数函数及前导零缺失问题咨询
核心问题
你定义的函数返回类型为INT数值类型,MySQL会自动截断数值类型的前导零,这是前导0丢失的根本原因。同时分支中num=1时返回的是INT类型的0,类型不统一也会引发隐性转换问题。
解决步骤
- 修改函数返回值类型为
VARCHAR(255),匹配你拼接好的字符串结果类型 - 统一所有分支的返回值为字符串类型,避免隐性类型转换
修改后的完整代码
DELIMITER $$ CREATE FUNCTION fibonacci(num INT) RETURNS VARCHAR(255) DETERMINISTIC BEGIN DECLARE fib1 INT DEFAULT 0; DECLARE fib2 INT DEFAULT 1; DECLARE fib3 INT DEFAULT 0; DECLARE str VARCHAR(255) DEFAULT '01'; IF num = 1 THEN RETURN '0'; ELSEIF num = 2 THEN RETURN '01'; ELSE WHILE num > 2 DO SET fib3 = fib1 + fib2; SET fib1 = fib2; SET fib2 = fib3; SET num = num - 1; SET str = CONCAT(str, fib3); END WHILE; RETURN str; END IF; END $$ DELIMITER ;
验证效果
执行调用语句SELECT fibonacci(6);,即可得到正确结果011235,前导零正常保留。
内容的提问来源于stack exchange,提问作者Albert Einstein
相关产品推荐
相关产品推荐

