我正在尝试在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
DAYSPASSED
(date
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行
然而,我无法确定它有什么问题。
答案 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 ;
答案 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
。