【问题标题】:MySQL: Simple way to toggle a value of an int fieldMySQL:切换 int 字段值的简单方法
【发布时间】:2023-03-15 04:10:01
【问题描述】:

我知道怎么做,但我想我会用双选等等使它过于复杂。

如何做到这一点(伪 sql 中的示例)

UPDATE some_table SET an_int_value = (an_int_value==1 ? 0 : 1);

由于某些其他功能,它必须是一个 int 值,但是您如何以简单的方式做到这一点?

【问题讨论】:

    标签: mysql


    【解决方案1】:
    UPDATE table SET field = 1 - field
    

    【讨论】:

    • 非常简单的数学逻辑,既美妙又优雅。太棒了,向你致敬!
    • 这与使用IF 的区别在于它与NULL 的行为方式。使用IF 将空值设置为1,使用它它们保持NULL。真的取决于你想要什么。
    • 我喜欢这个解决方案,因为它也适用于其他数据库! (不具备 IF 功能)
    【解决方案2】:
    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

    【讨论】:

    • 如何传递数组使0和1动态化
    【解决方案3】:
    UPDATE some_table SET an_int_value = IF(an_int_value=1, 0, 1)
    

    【讨论】:

      【解决方案4】:

      在这种情况下,您可以使用 XOR 类型的操作:

      UPDATE some_table SET an_int_value = an_int_value XOR 1
      

      这是假设 an_int_value 始终为 1 或 0。

      【讨论】:

        【解决方案5】:

        我可以看到所有有经验的人的答案,我也更新了他们的答案。

        这个呢... 我是这样做的……

        UPDATE tablename SET fieldname = not fieldname
        

        如果这不是一个可行的解决方案,请任何机构提出建议。关于执行速度或任何其他...说什么...事实...概念...。

        【讨论】:

        • 这在 MySQL 中有效,但只是巧合以及它们将布尔值作为整数 0/1 的非标准实现。这可能不适用于大多数其他标准 SQL 实现(尽管我没有测试过)。
        【解决方案6】:

        另一种选择:

        UPDATE some_table SET an_int_value = ABS(an_int_value - 1);
        

        【讨论】:

          【解决方案7】:

          如果您使用的是 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 */

          【讨论】:

            【解决方案8】:

            对于 ENUM(0,1) 字段,您可以使用...

            更新表 SET int_value=BINARY(int_value=1)

            【讨论】:

              【解决方案9】:

              对于 ENUM(0,1) UPDATE some_table SET an_int_value = IF(an_int_value='1', '0', '1');

              【讨论】:

              • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
              猜你喜欢
              • 1970-01-01
              • 2013-09-16
              • 1970-01-01
              • 2012-11-24
              • 2012-10-23
              • 2014-06-14
              • 2014-12-22
              • 2017-06-09
              相关资源
              最近更新 更多