Mysql 存储函数-错误#1064-反勾选/勾选?
我生成了以下SQL代码:Mysql 存储函数-错误#1064-反勾选/勾选?,mysql,sql,function,Mysql,Sql,Function,我生成了以下SQL代码: DELIMITER $$ CREATE FUNCTION flighttime (p_arrival(DATE), p_departure(DATE)) RETURNS CHAR(50) BEGIN DECLARE v_hour INT; DECLARE v_minute INT; DECLARE v_htext CHAR(10); DECLARE v_mtext CHAR(10); DECLARE v_flighttime C
DELIMITER $$
CREATE FUNCTION flighttime (p_arrival(DATE), p_departure(DATE))
RETURNS CHAR(50)
BEGIN
DECLARE v_hour INT;
DECLARE v_minute INT;
DECLARE v_htext CHAR(10);
DECLARE v_mtext CHAR(10);
DECLARE v_flighttime CHAR(50);
DATEDIFF(minute, p_departure, p_arrival) AS v_minute;
v_hour = v_minute/60;
v_minute = v_minute-(v_hour*60);
IF v_hour<2 AND v_minute<2 THEN SET v_htext=' hour and ' AND v_mtext=' minute';
ELSEIF v_hour<2 AND v_minute>1 THEN SET v_htext=' hour and ' AND v_mtext=' minutes';
ELSEIF v_hour>1 AND v_minute<2 THEN SET v_htext=' hours and ' AND v_mtext=' minute';
ELSE SET v_htext=' hours and ' AND v_mtext=' minutes';
SET v_flighttime = CONCAT(v_hour, v_mtext, v_minute, v_mtext);
RETURN v_flighttime;
END
$$
DELIMITER;
分隔符$$
创建函数flighttime(p_到达(日期)、p_离开(日期))
返回字符(50)
开始
声明v_hour INT;
声明v_分钟整数;
声明v_htext CHAR(10);
声明多行文字字符(10);
声明v_flighttime字符(50);
DATEDIFF(分钟、p_出发、p_到达)作为v_分钟;
v_小时=v_分钟/60;
v_分钟=v_分钟-(v_小时*60);
如果v_hour您的声明无效。应该是
CREATE FUNCTION flighttime (p_arrival DATE, p_departure DATE)
....
然后,由于值的设置无效,很快会出现另一个错误,您应该使用SET
SET v_minute = DATEDIFF(minute, p_departure, p_arrival);
SET v_hour = v_minute/60;
SET v_minute = v_minute-(v_hour*60);
完整代码
DELIMITER $$
CREATE FUNCTION flighttime (p_arrival DATE, p_departure DATE)
RETURNS CHAR(50)
BEGIN
DECLARE v_hour INT;
DECLARE v_minute INT;
DECLARE v_htext CHAR(10);
DECLARE v_mtext CHAR(10);
DECLARE v_flighttime CHAR(50);
SET v_minute = DATEDIFF(minute, p_departure, p_arrival);
SET v_hour = v_minute/60;
SET v_minute = v_minute-(v_hour*60);
IF v_hour<2 AND v_minute<2 THEN
SET v_htext = ' hour and ';
SET v_mtext=' minute';
ELSEIF v_hour<2 AND v_minute>1 THEN
SET v_htext=' hour and ';
SET v_mtext=' minutes';
ELSEIF v_hour>1 AND v_minute<2 THEN
SET v_htext=' hours and ';
SET v_mtext=' minute';
ELSE
SET v_htext=' hours and ';
SET v_mtext=' minutes';
END IF;
SET v_flighttime = CONCAT(v_hour, v_mtext, v_minute, v_mtext);
RETURN v_flighttime;
END $$
DELIMITER ;
分隔符$$
创建函数flighttime(p_到达日期、p_离开日期)
返回字符(50)
开始
声明v_hour INT;
声明v_分钟整数;
声明v_htext CHAR(10);
声明多行文字字符(10);
声明v_flighttime字符(50);
设置v_minute=DATEDIFF(分钟、p_出发、p_到达);
设置v_小时=v_分钟/60;
设置v_分钟=v_分钟-(v_小时*60);
如果v_hour向JW求助。我不得不修改和改进一些东西,现在它工作得很好:)这个问题涉及到一个重要的语法细节,在MySQL的正常使用过程中偶尔会出现这个细节,所以我建议重新打开它。
DELIMITER $$
CREATE FUNCTION flighttime (p_arrival DATE, p_departure DATE)
RETURNS CHAR(50)
BEGIN
DECLARE v_hour INT;
DECLARE v_minute INT;
DECLARE v_htext CHAR(10);
DECLARE v_mtext CHAR(10);
DECLARE v_flighttime CHAR(50);
SET v_minute = DATEDIFF(minute, p_departure, p_arrival);
SET v_hour = v_minute/60;
SET v_minute = v_minute-(v_hour*60);
IF v_hour<2 AND v_minute<2 THEN
SET v_htext = ' hour and ';
SET v_mtext=' minute';
ELSEIF v_hour<2 AND v_minute>1 THEN
SET v_htext=' hour and ';
SET v_mtext=' minutes';
ELSEIF v_hour>1 AND v_minute<2 THEN
SET v_htext=' hours and ';
SET v_mtext=' minute';
ELSE
SET v_htext=' hours and ';
SET v_mtext=' minutes';
END IF;
SET v_flighttime = CONCAT(v_hour, v_mtext, v_minute, v_mtext);
RETURN v_flighttime;
END $$
DELIMITER ;