【问题标题】:How to toggle a boolean in postgres in one query如何在一个查询中切换 postgres 中的布尔值
【发布时间】:2018-02-22 22:02:38
【问题描述】:

我正在尝试更新 postgres 表中的一行。我想切换一个布尔字段。

我没有先检查值是什么并用相反的值更新字段,而是想知道是否有一个查询来更新字段。

我找到了 MySQL 的解决方案,但它不适用于 postgres:

 UPDATE table SET boolean_field = !boolean_field WHERE id = :id

 Error: Operator does not exist. ! boolean

postgres 中有类似的语法吗?

【问题讨论】:

    标签: database postgresql boolean


    【解决方案1】:

    使用NOT:

    UPDATE table SET boolean_field = NOT boolean_field WHERE id = :id
    

    当旧值等于 FALSE 时,它变为 TRUE,反之亦然。 NULL 字段不会翻转,没有可翻转的内容。

    完整示例:

    CREATE TABLE test(id serial, boolean_field boolean);
    
    INSERT INTO test(boolean_field) 
    VALUES(null),(false), (true) 
    RETURNING *;
    

    并运行测试:

    UPDATE test
    SET boolean_field = NOT boolean_field 
    RETURNING *;
    

    【讨论】:

    • 如果布尔值不可为空(它不应该是),那就太好了,但如果是,我们需要用 false 填充那些 vals 怎么办?没有强制转换这可能吗?
    【解决方案2】:
    UPDATE table_name 
      SET bool_col = NOT(COALESCE(bool_col, FALSE)) 
    WHERE ...
    

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 1970-01-01
      • 2018-05-16
      • 2017-09-27
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多