【问题标题】:Create function on mysql在mysql上创建函数
【发布时间】:2020-12-18 16:18:53
【问题描述】:

我在mysql上有以下内容:

DELIMITER //
CREATE FUNCTION dateDiff1(contract_id INT, cust_id INT)
RETURNS INT
BEGIN
DECLARE startDate, endDate DATETIME;
DECLARE result int;
SET startDate = (SELECT startDate FROM contract WHERE insurance_cover_id = contract_id AND customer_id = cust_id);
SET endDate = (SELECT endDate FROM contract WHERE insurance_cover_id = contract_id AND customer_id = cust_id);
SET result = (SELECT TIMESTAMPDIFF(MONTH, endDate, startDate));
RETURN result;
END;
//
DELIMITER ;

SELECT dateDiff1(1,1);

它返回NULL,有什么建议吗?

【问题讨论】:

  • 顺便说一句,这可以在一个查询中完成:RETURN (SELECT TIMESTAMPDIFF(MONTH, endDate, startDate) FROM contract WHERE insurance_cover_id = contract_id AND customer_id = cust_id);
  • 你尝试过什么调试问题?
  • 不要为变量使用与列名相同的名称。它选择的是变量,而不是列。
  • 或者将查询改为SELECT contract.startDate ...
  • 您确定您的表中存在contract_id 1 和cust_id 1 的数据吗?

标签: mysql create-function


【解决方案1】:

也许,只要您的数据库中有一些数据,您就可以解决您的问题:

CREATE FUNCTION datediff1(_contract_id INT [, _cust_id INT])
RETURNS INT DETERMINISTIC
BEGIN
    DECLARE res INT;
    SELECT TIMESTAMPDIFF(MONTH, endDate, startDate) FROM contract WHERE contract_id = 
    _contract_id [AND cust_id = _cust_id] INTO res;
RETURN res;
END

我将 cust_id 相关部分标记为可选,因为您的 contract_id 很可能已被提及特定客户。 我希望它会有所帮助。祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2012-07-30
    • 2011-10-08
    • 2011-05-17
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多