我正在尝试运行一个SQL代码(我使用MySQL)。我想要做的是在满足第一个条件时设置一个值,当第一个条件不满足时设置一个不同的值。问题是,第一个条件总是被执行,即使它不应该执行。我做错了什么?
UPDATE BILLS
SET STATE = 2,
DATE_REACT =
CASE
WHEN (DATE_EM <= CURTIME() <= ADDTIME(DATE_EM, '00:02:00')) THEN ADDTIME(CURTIME(), '00:13:00')
ELSE ADDTIME(DATE_REACT, '00:13:00')
END
WHERE STATE = 1;发布于 2014-09-26 10:06:36
你不能把这样的布尔表达式组合起来。这样试一试:
UPDATE BILLS
SET STATE = 2,
DATE_REACT =
CASE
WHEN (DATE_EM <= CURTIME() AND CURTIME() <= ADDTIME(DATE_EM, '00:02:00')) THEN ADDTIME(CURTIME(), '00:13:00')
ELSE ADDTIME(DATE_REACT, '00:13:00')
END
WHERE STATE = 1;发布于 2014-09-26 10:02:39
问题是这一部分:
( DATE_EM <= CURTIME() <= ADDTIME(DATE_EM, '00:02:00') )这在SQL中是不允许的。语法(a <= b <= c)在某些语言中是有效的,比如Python,但在SQL中不有效。MySQL允许它,但是正如你已经发现的,做一些不同的事情,而不是你想要的。
将其替换为(a <= b AND b <= c):
( DATE_EM <= CURTIME() AND CURTIME() <= ADDTIME(DATE_EM, '00:02:00') )https://dba.stackexchange.com/questions/77734
复制相似问题