MySQL 简单函数不适用于变量声明

标签 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 query is mislukt: "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(), added) CASE temp WHEN 0 SET output = 'today' WHEN 1 SET output = 'yesterday' ELSE SET output = CONCAT(temp, ' days ago') RETURN output END"

MySQL retourneerde: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE temp DATETIME SET temp = DATEDIFF(NOW(), added) CASE temp WHEN 0 SET ' at line 3

但是我不太明白它有什么问题。

最佳答案

您缺少一些分号,您的 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 .

关于MySQL 简单函数不适用于变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20789169/

相关文章:

java - 从 servlet 连接到数据库

mysql - 几乎相同的查询中的巨大性能差异

javascript - 函数返回值未定义

mysql - 如何使用参数匹配两个表时从第一个表获取空行

java - 从数据库中检索 ZIP - 如何使用索引对其进行优化

mysql - 调用退出后, Node Mysql 无法将查询入队

javascript - HTML 表单按钮无法正常工作

c - C中的动态列表头疼,反向打印列表?为什么?

php - 在我的计算机上使用 PHP 从 MySQL InnoDB 数据库 [XAMPP] 获取结果比在其他计算机上花费的时间长得多

PHP MySql 更新查询不起作用,说 :- Undefined Index