Database 如何在一个查询中切换postgres中的布尔值
我正在尝试更新postgres表中的一行。我想切换一个布尔字段 我想知道是否有一个查询来更新字段,而不是首先检查值是什么并用相反的值更新字段 我找到了MySQL的解决方案,但它不适用于postgres:Database 如何在一个查询中切换postgres中的布尔值,database,postgresql,boolean,Database,Postgresql,Boolean,我正在尝试更新postgres表中的一行。我想切换一个布尔字段 我想知道是否有一个查询来更新字段,而不是首先检查值是什么并用相反的值更新字段 我找到了MySQL的解决方案,但它不适用于postgres: UPDATE table SET boolean_field = !boolean_field WHERE id = :id Error: Operator does not exist. ! boolean postgres中有类似的语法吗?使用: 当旧值等于FALSE时,它将变为TR
UPDATE table SET boolean_field = !boolean_field WHERE id = :id
Error: Operator does not exist. ! boolean
postgres中有类似的语法吗?使用:
当旧值等于FALSE时,它将变为TRUE,反之亦然。空字段不会翻转,没有可翻转的对象
完整示例:
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填充这些VAL呢?这不需要铸造就可以吗?
UPDATE test
SET boolean_field = NOT boolean_field
RETURNING *;
UPDATE table_name
SET bool_col = NOT(COALESCE(bool_col, FALSE))
WHERE ...