将日期作为MySQL存储过程的IN参数处理

时间:2019-01-19 02:49:36

标签: mysql sql stored-procedures

我想实现的目标 我正在MySQL数据库上创建一个Procedure,它将得到标记为netamt的净额总计列,其中标记为purdate的购买日期在StartDate和{之间{1}}。我用SQL查询尝试了两种单独的方法。当我运行EndDate查询时,MySQL会接受它并创建我的CREATE。但是,当我尝试调用Procedure时,它将返回Procedure

我的SQL查询

这是我的第一个NULL代码的样子:

CREATE

这是我的第二个CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`( IN startDate DATE, IN endDate DATE, OUT totalNet DECIMAL(19,4) ) BEGIN SELECT SUM(COALESCE(p.netamt,0)) INTO totalNet FROM Payables p WHERE p.purdate >= str_to_date(startDate, '%Y-%m-d%') AND p.purdate <= str_to_date(endDate, '%Y-%m-d%'); END 代码的样子:

CREATE

这是具有正确结果的普通查询的样子:

CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
  IN startDate DATE,
  IN endDate DATE,
  OUT totalNet DECIMAL(19,4)
)
BEGIN
 SELECT
    SUM(COALESCE(p.netamt,0)) INTO totalNet
    FROM Payables p
    WHERE p.purdate  BETWEEN str_to_date(startDate, '%Y-%m-d%') AND  str_to_date(endDate, '%Y-%m-d%');
END

这就是我所说的SELECT SUM(COALESCE(p.netamt,0)) as totalNet FROM Payables p WHERE p.purdate BETWEEN '2018-01-01' AND '2018-12-31'

Procedure

我当前存储的过程 My Currently Stored Procedure

我的查询以调用存储过程 My Queries to Call Procedure

如果我一次运行两个查询的结果 Result if Query All

如果我仅运行Select查询的结果 Result if I Query Select

这是我使用常规查询得到的预期结果 enter image description here

1 个答案:

答案 0 :(得分:1)

您正在将值作为日期传递。您不需要转换它们:

CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
  IN in_startDate DATE,
  IN in_endDate DATE,
  OUT out_totalNet DECIMAL(19,4)
)
BEGIN
  SELECT COALESCE(SUM(p.netamt), 0) INTO out_totalNet
  FROM Payables p
  WHERE p.purdate >= in_startDate AND 
        p.purdate <= in_endDate;
END;