gpt4 book ai didi

mysql - 日期尚未设定

转载 作者:行者123 更新时间:2023-11-29 12:45:42 24 4
gpt4 key购买 nike

我有一个应该始终设置日期的程序,但它没有:

CREATE PROCEDURE 'player_extend_membership` (pid INTEGER, daysToAdd INTEGER, OUT result INTEGER)
BEGIN
SELECT PlayerMembershipEndDate INTO @memDate FROM players WHERE players.PlayerID = pid LIMIT 1;
SELECT ROW_COUNT() INTO @num;

IF @num = 0 THEN
SET result = -1;
ELSE

IF @memDate = NULL OR DATE(@memDate) < DATE(NOW()) THEN
SET @finalDate = DATE_ADD(DATE(NOW()), INTERVAL daysToAdd DAY);
ELSE
SET @finalDate = DATE_ADD(DATE(@memDate), INTERVAL daysToAdd DAY);
END IF;

SELECT @finalDate, @memDate;
UPDATE players SET PlayerMembershipEndDate = @finalDate
WHERE players.PlayerID = pid;
SET result = 1;
END IF;
END

查看返回值为1,说明账户确实存在。它告诉我 select 查询的结果始终是 @finalDate 为 NULL。

但是,如果将其从 IF 中取出并执行以下操作:

SET @finalDate = DATE_ADD(DATE(NOW()), INTERVAL daysToAdd DAY);

日期设置正确。

我不知道我做错了什么。

谢谢

最佳答案

你的程序似乎太复杂了。也许这符合您的要求:

set @result = -1;
UPDATE players
SET PlayerMembershipEndDate = (case when (@result := 1) is null then NULL
when @memDate IS NULL OR DATE(@memDate) < DATE(NOW())
then DATE_ADD(DATE(NOW()), INTERVAL daysToAdd DAY)
else DATE_ADD(DATE(@memDate), INTERVAL daysToAdd DAY)
end)
WHERE players.PlayerID = pid;

如果找到一行,case 中的第一个条件只会设置 @result。尽管 CURDATE() 更简洁,但我还是留下了 DATE(NOW()) 的表述。

我怀疑您的逻辑的实际问题是= NULL。这总是返回“UNKNOWN”,这被视为错误。正确的表达式是is NULL

关于mysql - 日期尚未设定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25463208/

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