gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:25:07 26 4
gpt4 key购买 nike

我想要实现的目标我正在我的 MySQL 数据库上创建一个 Procedure,它将获得标记为 netamt 的总 Netty 列,其中 Purchase Date 标记为 purdate介于 StartDateEndDate 之间。我用我的 SQL 查询尝试了两种不同的方法。当我运行 CREATE 查询时,MySQL 会接受它并创建我的 Procedure。但是,当我尝试调用 Procedure 时,它返回 NULL

我的 SQL 查询

这是我的第一个 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'

这就是我调用过程的方式:

Call Payable_Total_Net('2018-01-01','2018-12-31',@totalNet);
SELECT @totalNet;

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

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

如果我同时运行两个查询的结果 Result if Query All

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

这是我使用普通查询的预期结果 enter image description here

最佳答案

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

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;

关于mysql - 将日期作为 MySQL 存储过程的 IN 参数处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54263681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com