You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL存储过程日期入参异常:调用后返回NULL问题排查

解决MySQL存储过程调用返回NULL的问题

嘿,我一眼就瞅出你存储过程里的问题了,这两个小错误直接导致查询没匹配到任何数据,所以返回了NULL:

  • 错误的日期格式字符串:你用的str_to_date(startDate, '%Y-%m-d%')有两处问题:一是日的格式符应该是%d(两位数字格式)而不是d;二是末尾多了个多余的%符号。这会让str_to_date转换失败得到NULL,WHERE条件里和NULL做比较的结果永远是不匹配,自然查不到数据。
  • 多余的日期转换操作:你的输入参数startDate和endDate已经定义为DATE类型了,MySQL会自动把你传入的日期字符串(比如'2018-01-01')转换成DATE类型,完全没必要再用str_to_date画蛇添足,反而搞出问题。

给你修正后的存储过程代码:

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 startDate AND endDate;
END

这个版本直接用DATE类型参数和purdate做范围比较,既避免了转换错误,还能利用purdate字段上的索引(如果有的话)提升查询效率。

你还是用原来的调用方式测试就行:

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

这次就能得到和普通SQL查询一致的正确结果了。

内容的提问来源于stack exchange,提问作者rainbasa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:02:34