【问题标题】:Mysql syntax error creating stored function 5.6.10Mysql语法错误创建存储函数5.6.10
【发布时间】:2018-05-10 19:32:02
【问题描述】:

我在 MySQL 中执行以下函数时遇到语法错误。

DELIMITER $$

DROP FUNCTION IF EXISTS `WORKDAYS` $$
CREATE FUNCTION `WORKDAYS` (start_date DATETIME, end_date DATETIME) 
RETURNS INT
LANGUAGE SQL
DETERMINISTIC

BEGIN 
 DECLARE days INT; 
 SET days = 0;
 REPEAT
 SET days = days + (CASE WHEN DAYNAME(start_date) in ('Friday', 
                      'Saturday', 'Sunday') THEN 0  ELSE 1 END);
 SET start_date = DATE_ADD(start_date, INTERVAL 1 DAY);
 UNTIL start_date > end_date END  REPEAT;     
 RETURN days;
END $$
DELIMITER ;

我得到错误:[查询 2 中的错误] 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“返回天数”附近使用的正确语法; END' 在第 13 行

【问题讨论】:

  • 我得到错误:[查询 2 中的错误] 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“返回天数”附近使用的正确语法; END' 在第 13 行
  • 编辑您的问题并添加错误消息的全文
  • @SloanThrasher 谢谢.. 将错误消息添加到问题中
  • 您实际上并没有在第一个 DELIMITER 语句之前和最后一个语句之后使用 `` 运行 sql,是吗?
  • 刚刚检查了语法,发现显示为空格的奇怪字符。清理了空间,检查结果很好。我会用干净的文字发布答案

标签: mysql stored-functions


【解决方案1】:

END REPEAT; 之后的查询中的隐藏字符。确保您的编辑器是 UTF-8。

DELIMITER $$

DROP FUNCTION IF EXISTS `WORKDAYS`$$

CREATE FUNCTION `WORKDAYS` (start_date DATETIME, end_date DATETIME) 
RETURNS INT
LANGUAGE SQL
DETERMINISTIC

BEGIN 
    DECLARE days INT; 
    SET days = 0;
    REPEAT
        SET days = days + (CASE WHEN DAYNAME(start_date) in ('Friday','Saturday', 'Sunday') THEN 0 ELSE 1 END);
        SET start_date = DATE_ADD(start_date, INTERVAL 1 DAY);
    UNTIL start_date > end_date END REPEAT;
RETURN days;
END$$

DELIMITER ;

【讨论】:

  • 非常感谢您清理查询@Sloan Thrasher
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 2011-03-25
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多