在MySQL存储过程的参数中处理日期
我想要实现的目标 我正在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`
过程
,该过程将获得标记为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是如何存储在应付账款表中的?