MySQL简单函数不能处理变量声明

时间:2013-12-26 18:07:24

标签: mysql function phpmyadmin

我正在尝试在phpMyAdmin中的MySQL上定义自己的FUNCTION

BEGIN
DECLARE output VARCHAR
DECLARE temp DATETIME
SET temp = DATEDIFF(NOW(), added)
CASE temp
WHEN 0 SET output = 'today'
WHEN 1 SET output = 'yesterday'
ELSE SET output = CONCAT(temp, ' days ago')
RETURN output
END

错误如下:

  

De volgende查询是错误的:“CREATE FUNCTION DAYSPASSEDdate DATETIME)RETURNS VARCHAR(255)NOT DETERMINISTIC MODIFIES SQL DATA SQL SECURITY DEFINER BEGIN DECLARE output VARCHAR DECLARE temp DATETIME SET temp = DATEDIFF( NOW(),添加)CASE temp WHEN 0 SET输出='今天'WHEN 1 SET输出='昨天'ELSE SET输出= CONCAT(临时,'天前')返回输出END“

     

MySQL retourneerde:#1064 - 您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'DECLARE临近使用正确的语法DATETIME SET temp = DATEDIFF(NOW(),添加)CASE temp WHEN 0 SET'在第3行

然而,我无法确定它有什么问题。

2 个答案:

答案 0 :(得分:2)

你缺少一些分号,你的varchar的长度说明符,你的case语法中有一些错误。这似乎适用于//分隔符;

DELIMITER //
CREATE FUNCTION DAYSPASSED(added DATETIME) RETURNS VARCHAR(255) 
NOT DETERMINISTIC 
MODIFIES SQL DATA 
SQL SECURITY DEFINER 
BEGIN 
  DECLARE output VARCHAR(32);
  DECLARE temp INT;
  SET temp = DATEDIFF(NOW(), added);
  CASE temp WHEN 0 THEN SET output = 'today'; 
            WHEN 1 THEN SET output = 'yesterday';
            ELSE SET output = CONCAT(temp, ' days ago');
  END CASE;
  RETURN output;
END//
DELIMITER ;

An SQLfiddle to test with

答案 1 :(得分:0)

答案必须如下:

BEGIN
DECLARE output VARCHAR(255) DEFAULT '';
DECLARE temp INT;
SET temp = DATEDIFF(NOW(), date);
CASE temp
WHEN 0 THEN SET output = 'today';
WHEN 1 THEN SET output = 'yesterday';
ELSE SET output = CONCAT(temp, ' days ago');
END CASE;
RETURN output;
END

请注意以下更改:

  • 行必须以分号;
  • 终止
  • output需要DEFAULT ''值。
  • CASE的语法为CASE ... WHEN ... THEN ... END CASE

修改:temp应为INT