首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的存储函数不喜欢用户提供的日期?

问MySQL中的存储函数不喜欢用户提供的日期?
EN

Stack Overflow用户
提问于 2009-08-05 21:37:35
回答 1查看 638关注 0票数 3

我在MySQL中有一个存储函数:

代码语言:javascript
复制
CREATE FUNCTION `login_count`(o INT, start_date DATE, end_date DATE) RETURNS INT
READS SQL DATA
BEGIN
DECLARE total_count INT;
SELECT COUNT(*) INTO total_count FROM logins as l WHERE `order_id` = o && modified BETWEEN start_date AND end_date; 
RETURN total_count; 
END

非常简单,接受id、开始日期和结束日期,然后返回该日期范围内的登录次数。每当我运行它时,我得到的结果都是0。除非我删除了where子句中的日期部分。然后它返回一个实际的数字。或者,如果我只是手动将日期放入存储函数中,它就会起作用……所以这不是日期的问题,只有当我通过参数列表提供日期时,它才不喜欢。

有什么想法会导致这种情况发生吗?事实上,我可以手动将日期放入存储函数中,并且它确实有效,这真的让我感到困扰。这并不像是发生了很多可能会搞砸的事情,所以我有点迷茫,不知道下一步该怎么做。

另外,有没有一种方法可以调试存储函数/过程。我只是得到了一个0,但是有没有一种方法可以让我调试它,尝试并计算出可能发生的事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-05 21:53:03

我的第一个猜测是,您提供的日期格式MySQL无法识别。MySQL对日期字面量的格式非常挑剔。它需要YYYY-MM-DD、YY-MM-DD、YYYYMMDD或YYMMDD (您也可以使用任何其他标点符号来代替破折号)。有关更多详细信息,请参阅The DATETIME, DATE, and TIMESTAMP Types。

您还可以使用STR_TO_DATE()函数将更多的日期格式转换为MySQL可接受的格式。

关于调试存储过程和存储函数,您始终可以设置带有@前缀的用户定义变量,并且在存储函数返回后,此变量将全局可用。就像副作用一样。因此,您可以在运行存储函数时使用它来设置诊断信息,然后在之后进行检查。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1235895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档