Postgres - 转换为布尔值

时间:2011-07-11 08:48:10

标签: sql database postgresql boolean

我正在尝试更新Postgres数据库以设置布尔值,但我收到以下错误

  

没有运算符匹配给定的名称和参数类型。你可能需要   添加显式类型转换。

我已经删除了表格描述以显示它的结构。

       Column       |            Type             | Modifiers 
--------------------+-----------------------------+-----------
 archived           | boolean                     | 

db中的列当前为空,因此我没有其他用作比较。

我尝试了以下内容:

UPDATE table_name SET archived=TRUE WHERE id=52;
UPDATE table_name SET archived='t' WHERE id=52;
UPDATE table_name SET archived='1' WHERE id=52;
UPDATE table_name SET archived='t'::boolean WHERE id=52;

这些都没有奏效。

如何将UPDATE转换为布尔值?

更新:完整错误消息

play_mercury=# UPDATE opportunities SET archived=TRUE WHERE id=(52,55,35,17,36,22,7,2,27,15,10,9,13,5,34,40,30,23,21,8,26,18,3,42,25,20,41,28,19,14,39,44,16,24,4,33,54,47,29,38,64);
ERROR:  operator does not exist: bigint = record
HINT:  No operator matches the given name and argument type(s). You may need to add explicit type casts.

3 个答案:

答案 0 :(得分:5)

问题出在WHERE id=(52,55,...)

使用:WHERE id IN (52,55,...)

答案 1 :(得分:3)

您的WHERE条件错误。您需要使用IN而不是=

UPDATE opportunities 
  SET archived=TRUE 
WHERE id IN (52,55,35,17,36,22,7,2,27,15,10,9,13,5,34,40,30,23,21,8,26,18,3,42,25,20,41,28,19,14,39,44,16,24,4,33,54,47,29,38,64);

答案 2 :(得分:0)

你好吗?通过plsql? 根据{{​​3}},这些应该是有效的,这对我也有用:

tmp=# create table bar (a boolean, b int);
CREATE TABLE
tmp=# insert into bar values (TRUE, 1);
INSERT 0 1
tmp=# update bar set a=false where b=1;
UPDATE 1
tmp=# \d bar
      Table "public.bar"
 Column |  Type   | Modifiers 
--------+---------+-----------
 a      | boolean | 
 b      | integer |