phpmyadmin MySQL简单函数在变量声明上不起作用

guykilcj  于 2023-01-17  发布在  PHP
关注(0)|答案(2)|浏览(141)

我尝试在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

错误如下所示:
数据查询错误:"创建函数DAYSPASSEDdate DATETIME)返回VARCHAR(255)不确定修改SQL数据SQL安全定义符开始声明输出VARCHAR声明临时日期时间设置临时= DATEDIFF(NOW(),已添加)情况临时当0时设置输出='今天'当1时设置输出='昨天'否则设置输出= CONCAT(临时,'几天前')返回输出结束"
MySQL返回地址:#1064-SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,了解在第3行"DECLARE temp DATETIME SET temp = DATEDIFF(NOW(),added)CASE temp WHEN 0 SET"附近使用的正确语法
然而,我看不出它有什么问题。

ha5z0ras

ha5z0ras1#

你缺少了一些分号,一个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 ;

要测试的SQLfiddle。

u59ebvdq

u59ebvdq2#

答案应该是:

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

相关问题