如何在mysql函数中使用TIMEDIFF?

时间:2019-09-11 10:52:29

标签: mysql

我想创建一个mysql函数,该函数包装几个mysql计算的序列。首先,我只是尝试包装简单的db.test_2.findOne({ "name": "Bob" }).select({ references: 1, _id: 1 }) ,但这甚至失败了:

    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node src/index.js"
  }

结果:

  

'#1064-您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本以使用正确的语法   在第3行的“ SELECT TIMEDIFF(t1,t2)”附近

1 个答案:

答案 0 :(得分:2)

您需要按以下方式编写

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 ;

请参阅demo

READS SQL DATA表示该函数包含读取数据的语句(例如SELECT),但不包含写入数据的语句。您还可以在这里辩论使用NOT DETERMINISTIC而不是在这里,因为您并不是真正在这里“读取”数据...

如手册CREATE FUNCTION中所述。

  

P.Salmon的评论(在问题下方)
  如果存储程序中只有1条语句,则不需要BEGIN   和END块,您无需设置定界符,

非常正确,这也是可能的。

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 ;

请参阅demo