DATE_FORMAT() in MySQL return 侧存储过程中的意外字符串

DATE_FORMAT() in MySQL return unexpected string in side stored procedure

我在存储过程中遇到 date_format() 问题。当我尝试将 datetime 格式化为来自存储过程外部的字符串时,它运行良好 - 如下所示:

SELECT DATE_FORMAT('2021-04-07 23:59:59.999999', "%d %b %Y");

输出为 07 Apr 2021,符合预期。

但是在存储过程中,它returns 08 Apr 2021。我认为问题出在 .999999 部分。如果我删除它,那么 date_format() return 07 Apr 2021。我该如何解决?

DELIMITER $$
CREATE PROCEDURE `App_Date_Format`(IN  pDateTime DATETIME)
BEGIN
    SELECT DATE_FORMAT(pDateTime, "%d %b %Y");
END$$
DELIMITER ;

注意:这是我完整存储过程的一部分

您将参数定义为 DATETIME,因此提供的值是四舍五入的。定义为 DATETIME(6):

CREATE PROCEDURE `App_Date_Format`(IN  pDateTime DATETIME(6))
BEGIN
    SELECT DATE_FORMAT(pDateTime, "%d %b %Y");
END

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d1017437fa575d42098b6f18014d9f0f