作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应该始终设置日期的程序,但它没有:
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/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!