如何在mysql函数中使用TIMEDIFF?

如何在mysql函数中使用TIMEDIFF?,mysql,Mysql,我想创建一个mysql函数,它封装了几个mysql计算的序列。作为起点,我只是尝试包装简单的TIMEDIFF,但这甚至失败了: CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME) RETURNS bigint(20) BEGIN RETURN SELECT TIMEDIFF(t1, t2); END; 结果: '1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第3行的“选择时间差t1、t2”附近

我想创建一个mysql函数,它封装了几个mysql计算的序列。作为起点,我只是尝试包装简单的TIMEDIFF,但这甚至失败了:

CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME) RETURNS bigint(20)
BEGIN
    RETURN SELECT TIMEDIFF(t1, t2);
END;
结果:

'1064-您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第3行的“选择时间差t1、t2”附近


你需要把它写在下面

DELIMITER $$

DROP FUNCTION IF EXISTS diff_minutes $$   

CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME)
RETURNS BIGINT
READS SQL DATA
BEGIN
    RETURN(
       SELECT TIMEDIFF(t1, t2)
    );
END;

DELIMITER ;

READS SQL DATA表示函数包含读取数据的语句(例如SELECT),但不包含写入数据的语句。您也可以在这里讨论使用“非确定性”来代替,因为您并不是真正在这里读取数据

如手册所述

三文鱼在该问题下的评论
如果存储程序中只有一条语句,则不需要开始 和结束块,不需要设置分隔符

非常正确,这也是可能的

DELIMITER $$

DROP FUNCTION IF EXISTS diff_minutes $$   

CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME)
RETURNS BIGINT
READS SQL DATA
RETURN(
  SELECT TIMEDIFF(t1, t2)
);

DELIMITER ;

请参见

您需要按以下方式编写

DELIMITER $$

DROP FUNCTION IF EXISTS diff_minutes $$   

CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME)
RETURNS BIGINT
READS SQL DATA
BEGIN
    RETURN(
       SELECT TIMEDIFF(t1, t2)
    );
END;

DELIMITER ;

READS SQL DATA表示函数包含读取数据的语句(例如SELECT),但不包含写入数据的语句。您也可以在这里讨论使用“非确定性”来代替,因为您并不是真正在这里读取数据

如手册所述

三文鱼在该问题下的评论
如果存储程序中只有一条语句,则不需要开始 和结束块,不需要设置分隔符

非常正确,这也是可能的

DELIMITER $$

DROP FUNCTION IF EXISTS diff_minutes $$   

CREATE FUNCTION diff_minutes(t1 TIME, t2 TIME)
RETURNS BIGINT
READS SQL DATA
RETURN(
  SELECT TIMEDIFF(t1, t2)
);

DELIMITER ;

请参见

此处的错误很可能是由于其他问题造成的。您需要从重新定义分隔符;去别的地方。检查这个重复:你能详细说明为什么我必须在这里重新定义分隔符吗?如果存储程序中只有一条语句,则不需要开始和结束块,也不需要设置分隔符,@membersound中解释道:如果使用mysql客户端程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql本身将分号识别为语句分隔符,因此您必须临时重新定义分隔符,以使mysql将整个存储程序定义传递给服务器。此错误很可能是由于其他问题造成的。您需要从重新定义分隔符;去别的地方。检查这个重复:你能详细说明为什么我必须在这里重新定义分隔符吗?如果存储程序中只有一条语句,则不需要开始和结束块,也不需要设置分隔符,@membersound中解释道:如果使用mysql客户端程序定义包含分号字符的存储程序,则会出现问题。默认情况下,mysql本身将分号识别为语句分隔符,因此您必须临时重新定义分隔符,以使mysql将整个存储程序定义传递给服务器。可能是DROP函数。。如果函数尚未创建,则可以避免,然后在回答的第二个查询中不需要重新定义分隔符。我觉得MySQL应该在更新版本中添加的另一种可能性是创建[function | table | procedure…]**如果不存在**。事实上@MadhurBhaiya当在第二个查询中不需要DROP函数时,您不必使用分隔符。。是的,创建[function | table | procedure..]如果不存在语法支持,MySQL最好也为存储程序/视图实现CREATE或REPLACE语句..可能是DROP函数。。如果函数尚未创建,则可以避免,然后在回答的第二个查询中不需要重新定义分隔符。我觉得MySQL应该在更新版本中添加的另一种可能性是创建[function | table | procedure…]**如果不存在**。事实上@MadhurBhaiya当在第二个查询中不需要DROP函数时,您不必使用分隔符。。是的,创建[function | table | procedure….]如果不存在语法支持,MySQL最好也能为存储程序/视图实现CREATE或REPLACE语句。。