首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL案例问题

MySQL案例问题
EN

Database Administration用户
提问于 2014-09-26 09:55:32
回答 2查看 119关注 0票数 1

我正在尝试运行一个SQL代码(我使用MySQL)。我想要做的是在满足第一个条件时设置一个值,当第一个条件不满足时设置一个不同的值。问题是,第一个条件总是被执行,即使它不应该执行。我做错了什么?

代码语言:javascript
复制
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;
EN

回答 2

Database Administration用户

发布于 2014-09-26 10:06:36

你不能把这样的布尔表达式组合起来。这样试一试:

代码语言:javascript
复制
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;
票数 4
EN

Database Administration用户

发布于 2014-09-26 10:02:39

问题是这一部分:

代码语言:javascript
复制
( DATE_EM <= CURTIME() <= ADDTIME(DATE_EM, '00:02:00') )

这在SQL中是不允许的。语法(a <= b <= c)在某些语言中是有效的,比如Python,但在SQL中不有效。MySQL允许它,但是正如你已经发现的,做一些不同的事情,而不是你想要的。

将其替换为(a <= b AND b <= c)

代码语言:javascript
复制
( DATE_EM <= CURTIME() AND CURTIME() <= ADDTIME(DATE_EM, '00:02:00') )
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/77734

复制
相关文章

相似问题

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