MySQL 带有 BETWEEN 运算符的 IF 语句未显示为有效
MySQL IF statement with BETWEEN operator, not showing as valid
谁能告诉我这个声明有什么地方是无效的?我已经尝试了几个不同的变体,但 none 显示为有效。我已经检查过,它说它应该有效但不是。是因为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== 1{BETWEEN '1' AND '2'}, 1{12}, 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;
(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_1
和1
。如果它们相等,则该操作的结果为 1
,否则为 0
。然后它检查 0
或 1
是否在 1
和 2
之间。
我猜你想要的是if(column_1 BETWEEN 1 AND 2, ...)
正如我在评论中所说,您需要一个专栏
UPDATE mytablename SET column_2 = IF(column_1 BETWEEN '1' AND '2', {new_value}, field_1) WHERE id=1;
{new_vaue} 只是一个占位符,您必须用值或列填充,见下文
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
id | column_2 | field_1
-: | -------: | ------:
1 | 12 | 1
db<>fiddle here
谁能告诉我这个声明有什么地方是无效的?我已经尝试了几个不同的变体,但 none 显示为有效。我已经检查过,它说它应该有效但不是。是因为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== 1{BETWEEN '1' AND '2'}, 1{12}, 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;
(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_1
和1
。如果它们相等,则该操作的结果为 1
,否则为 0
。然后它检查 0
或 1
是否在 1
和 2
之间。
我猜你想要的是if(column_1 BETWEEN 1 AND 2, ...)
正如我在评论中所说,您需要一个专栏
UPDATE mytablename SET column_2 = IF(column_1 BETWEEN '1' AND '2', {new_value}, field_1) WHERE id=1;
{new_vaue} 只是一个占位符,您必须用值或列填充,见下文
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
id | column_2 | field_1 -: | -------: | ------: 1 | 12 | 1
db<>fiddle here