带有 BETWEEN 运算符的 MySQL IF 语句,未显示为有效

Posted

技术标签:

【中文标题】带有 BETWEEN 运算符的 MySQL IF 语句,未显示为有效【英文标题】:MySQL IF statement with BETWEEN operator, not showing as valid 【发布时间】:2020-10-11 19:29:20 【问题描述】:

谁能告诉我这个声明有什么不妥之处?我已经尝试了一些不同的变体,但没有一个显示为有效。我已经检查过,它说它应该是有效的,但不是。是不是因为 BETWEEN 条件?

UPDATE mytablename SET column_2 = IF(BETWEEN '1' AND '2', new_value, field_1) WHERE id=1

UPDATE mytablename SET column_2 = IF(column_1== 1BETWEEN '1' AND '2', 112, field_1) WHERE id=1

更新 1 我在下面尝试过,但同样的结果无效-

UPDATE mytablename SET column_2 = IF(field_1 BETWEEN 1 AND 2, 12, field_1) WHERE id = 1

更新 2 我也试过这个,但它也无效:

UPDATE mytablename SET column_2 = 12 IF(field_1 BETWEEN 1 AND 2) WHERE id = 1

更新 3 也无效。意外的“”:

UPDATE mytablename SET column_2 = IF(field_1 BETWEEN '1' AND '2', 12, column_2 ) WHERE id=1;

【问题讨论】:

是在第二次更新中的列之前的需要之间,没有它是无效的 @nbk 谢谢。但第二个无效。根据以下内容, 无效 你的 updat1 工作得很好,就像你的数据库中有 column_1 和 field_1 一样,l,请不要将语法错误与其他错误混为一谈,并检查错误消息 我确实有一个字段 1 和一个列 1,但它实际上告诉我 是一个意外字符,整个查询旁边的红色 X 表示它不是有效的语法 看我的回答我添加了一个 dbfiddle 来向你展示它的工作原理,将 fiddle 更改为实验 【参考方案1】:

正如我在评论中所说,您需要一个专栏

UPDATE mytablename SET column_2 = IF(column_1 BETWEEN '1' AND '2', new_value, field_1) WHERE id=1;

new_vaue 只是一个占位符,您必须填写一个值或 cloumn 见下文

UPDATE mytablename SET column_2 = IF(column_1 BETWEEN '1' AND '2', 5, field_1) WHERE id=1;

UPDATE mytablename SET column_2 = IF(column_1 BETWEEN '1' AND '2', coumn3, field_1) WHERE id=1;

例子

CREATE TABLE mytablename(id int,column_2 int, field_1 int);
INSERT INTO mytablename VALUES (1,0,1)
UPDATE mytablename SET column_2 = IF(field_1 BETWEEN 1 AND 2, 12, field_1) WHERE id = 1
SELECT * FROM mytablename
编号 | column_2 |字段_1 -: | --------: | ------: 1 | 12 | 1

db小提琴here

【讨论】:

谢谢。根据 MYphpADMIN,这显示为无效。我什至无法运行查询。它告诉我 无效 newvalue 当然有效,必须有列或值 好的,谢谢。我当然添加了值,它告诉我任何带有 的东西都是无效的。我当然填写了所有内容 好,那你应该有任何错误了。请不要忘记accept it 您的查询不是无效的,但您的数据库必须有一个 columname field_1 和一个 column_1【参考方案2】:

(a) 大括号不属于那里。

(b) 如果字面量是整数字面量,不要单引号。

(c) 在(标准)SQL 中,比较运算符是 = 而不是 ==mysql 可能会接受后者,但如果您使用 =,您的代码会变得更加可移植。

(d) 你需要一个操作数来检查。所以语法是operand_to_check BETWEEN operand_lower_bound AND operand_upper_bound

因此只是if(BETWEEN 1 AND 2, ...) 是错误的。

if(column_1 = 1 BETWEEN 1 AND 2, ... 在技术上没问题,但可能没有达到您的预期。它的作用是首先比较column_11。如果它们相等,则该操作的结果为1,否则为0。然后它检查01 是否在12 之间。

我猜你想要的是if(column_1 BETWEEN 1 AND 2, ...)

【讨论】:

谢谢。我在上面更新,因为它仍然显示无效。也许我误解了,.... @Mikey; ... 只是其余代码的占位符。您必须用 if() 的任何第二和第三个参数替换它们。 我在上面更新了我想在那里有任何其他参数,只需要在满足条件时设置结果,但你说上面的设置是无效的。因此,设置条件 IF x 的有效代码是什么? @Mikey: if() 接受三个参数。所以你需要另外两个参数...... 没有三个参数怎么办?我见过许多只有一个论点的例子。我错过了什么?我要做的就是更新一个值,如果 column_1 的值介于 1 和 2 之间

以上是关于带有 BETWEEN 运算符的 MySQL IF 语句,未显示为有效的主要内容,如果未能解决你的问题,请参考以下文章

mysql join不使用'between'运算符的索引

使用 mySQL 运算符 BETWEEN 和经典日期间隔之间有啥区别? [复制]

MySQL的WHERE语句中BETWEEN与IN的使用教程

MySQL BETWEEN 语法

MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别

MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别