微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Postgresql案例和测试布尔字段

第一:我正在运行 postgresql 8.2并在pgAdmin上测试我的查询.

我有一张桌子上有一些字段,说:

mytable(
  id integer,mycheck boolean,someText varchar(200));

现在,我想要一个类似于此的查询

select id,case when mycheck then (select name from tableA)
       else (select name from tableB) end as mySpecialName,someText;

我试着跑,得到这个:

ERROR: CASE types character varying and boolean cannot be matched
sql state: 42804

甚至试图愚弄postgresql

case (mycheck::integer) when 0 then

没用.

所以,我的问题是:因为sql没有if,只有大小写,我想如何用布尔字段做一个if?

你的问题是你的值不匹配(之后的表达式和其他),而不是你的谓词(表达式之后的表达式).确保从tableA中选择名称并从tableB中选择名称返回相同的结果类型. mycheck应该是一个布尔值.

我在Postgresql 9.0beta2上运行了这个查询,并且(除了必须从mytable添加到SELECT语句以及创建表tableA和tableB),它没有产生任何类型错误.但是,我收到的错误消息很像您在运行以下内容时所描述的错误消息:

select case when true
           then 1
           else 'hello'::text 
       end;

以上产量:

ERROR:  CASE types text and integer cannot be matched

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐