我有以下MySQL代码:
Label
基本上,此功能以分钟为单位计算飞行的持续时间。参数是航班的ID。但由于某种原因,此函数始终返回NULL。我甚至检查了这个:
DELIMITER $$
CREATE FUNCTION durationInMinutes(id INT)
RETURNS INT DETERMINISTIC
BEGIN
DECLARE Minutes INT;
SET Minutes =
(SELECT TIME_TO_SEC(TIMEDIFF(timeDeparture, timeArrival)) FROM AirRoute
WHERE pk_id = id) / 60;
RETURN Minutes;
END$$
DELIMITER;
如果我输入id = 925,这确实会返回正确答案,因此RETURN语句可能有问题。
答案 0 :(得分:0)
我怀疑表中有一个名为id
的列。我总是命名参数和局部变量,以区别于列名:
CREATE FUNCTION durationInMinutes (
in_id INT
)
RETURNS INT DETERMINISTIC
BEGIN
DECLARE out_Minutes INT;
SELECT out_Minutes := TIME_TO_SEC(TIMEDIFF(timeDeparture, timeArrival))
FROM AirRoute ar
WHERE ar.pk_id = in_id) / 60;
RETURN out_Minutes;
END$$
答案 1 :(得分:0)
好的,我解决了。这是我更正后的代码:
DELIMITER $$
CREATE FUNCTION durationInMinutes(id INT)
RETURNS INT DETERMINISTIC
BEGIN
RETURN (SELECT TIME_TO_SEC(TIMEDIFF(timeDeparture, timeArrival))
FROM AirRoute
WHERE pk_id = id / 60);
END$$
DELIMITER ;
尽管如此,我真的不明白为什么使用临时变量是不可能的。