Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL存储过程的参数中处理日期_Mysql_Sql_Stored Procedures - Fatal编程技术网

在MySQL存储过程的参数中处理日期

在MySQL存储过程的参数中处理日期,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我想要实现的目标 我正在MySQL数据库上创建一个过程,该过程将获得标记为netamt的净金额列的总数,其中标记为purdate的购买日期介于StartDate和EndDate之间。我用SQL查询尝试了两种不同的方法。当我运行CREATE查询时,MySQL将接受它并创建我的过程。但是,当我尝试调用过程时,它返回NULL 我的SQL查询 下面是我的第一个创建代码的样子: CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`

我想要实现的目标 我正在MySQL数据库上创建一个
过程
,该过程将获得标记为
netamt
的净金额列的总数,其中标记为
purdate
的购买日期介于
StartDate
EndDate
之间。我用SQL查询尝试了两种不同的方法。当我运行
CREATE
查询时,MySQL将接受它并创建我的
过程
。但是,当我尝试调用
过程时,它返回
NULL

我的SQL查询

下面是我的第一个
创建
代码的样子:

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 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'
这就是我如何调用
过程的方法:

Call Payable_Total_Net('2018-01-01','2018-12-31',@totalNet);
SELECT @totalNet;
我当前的存储过程

调用存储过程的我的查询

如果我同时运行两个查询的结果

仅运行Select查询时的结果

这是我使用普通查询的预期结果
您正在将值作为日期传递。您不需要转换它们:

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;
CREATE DEFINER=`******`@`localhost`PROCEDURE`payment\\u Total\\u Net`(
在开始日期,
在IN_endDate中,
总净十进制数(19,4)
)
开始
选择合并(总和(p.netamt),0)到out\u totalNet
来自应付账款p
其中p.purdate>=in_startDate和

p、 purdate我试过了,它仍然返回
NULL
。我可以在这里发布一个屏幕截图吗?我已经按照建议用最近更改的屏幕截图更新了问题。purdate是如何存储在应付账款表中的?