【发布时间】:2023-03-15 04:10:01
【问题描述】:
我知道怎么做,但我想我会用双选等等使它过于复杂。
如何做到这一点(伪 sql 中的示例)
UPDATE some_table SET an_int_value = (an_int_value==1 ? 0 : 1);
由于某些其他功能,它必须是一个 int 值,但是您如何以简单的方式做到这一点?
【问题讨论】:
标签: mysql
我知道怎么做,但我想我会用双选等等使它过于复杂。
如何做到这一点(伪 sql 中的示例)
UPDATE some_table SET an_int_value = (an_int_value==1 ? 0 : 1);
由于某些其他功能,它必须是一个 int 值,但是您如何以简单的方式做到这一点?
【问题讨论】:
标签: mysql
UPDATE table SET field = 1 - field
【讨论】:
IF 的区别在于它与NULL 的行为方式。使用IF 将空值设置为1,使用它它们保持NULL。真的取决于你想要什么。
UPDATE some_table SET an_int_value = IF(an_int_value=1, 0, 1);
http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if
【讨论】:
UPDATE some_table SET an_int_value = IF(an_int_value=1, 0, 1)
【讨论】:
在这种情况下,您可以使用 XOR 类型的操作:
UPDATE some_table SET an_int_value = an_int_value XOR 1
这是假设 an_int_value 始终为 1 或 0。
【讨论】:
我可以看到所有有经验的人的答案,我也更新了他们的答案。
这个呢... 我是这样做的……
UPDATE tablename SET fieldname = not fieldname
如果这不是一个可行的解决方案,请任何机构提出建议。关于执行速度或任何其他...说什么...事实...概念...。
【讨论】:
另一种选择:
UPDATE some_table SET an_int_value = ABS(an_int_value - 1);
【讨论】:
如果您使用的是 TINYINT(0 和 1),则进行简单的 XOR (https://dev.mysql.com/doc/refman/8.0/en/logical-operators.html#operator_xor)
UPDATE
`some_table`
SET
`an_int_value` = `an_int_value` ^ 1
测试:
选择 0 ^ 1; /* 返回 1 */
选择 1 ^ 1; /* 返回 0 */
【讨论】:
对于 ENUM(0,1) 字段,您可以使用...
更新表 SET int_value=BINARY(int_value=1)
【讨论】:
对于 ENUM(0,1) UPDATE some_table SET an_int_value = IF(an_int_value='1', '0', '1');
【讨论】: