Wra*_*cko 6 sql postgresql boolean case
第一:我正在运行postgresql 8.2并在pgAdmin上测试我的查询.
我有一张桌子上有一些字段,说:
mytable(
id integer,
mycheck boolean,
someText varchar(200));
Run Code Online (Sandbox Code Playgroud)
现在,我想要一个类似于此的查询:
select id,
case when mycheck then (select name from tableA)
else (select name from tableB) end as mySpecialName,
someText;
Run Code Online (Sandbox Code Playgroud)
我试着跑,得到这个:
ERROR: CASE types character varying and boolean cannot be matched
SQL state: 42804
Run Code Online (Sandbox Code Playgroud)
甚至试图愚弄postgresql
case (mycheck::integer) when 0 then
Run Code Online (Sandbox Code Playgroud)
没用.
所以,我的问题是:因为sql没有if,只有大小写,我想如何用布尔字段做一个if?
Joe*_*ams 11
你的问题是你的值(表达式then和之后的表达式else)不匹配,而不是你的谓词(后面的表达式when).确保select name from tableA并select name from tableB返回相同的结果类型. mycheck应该是一个布尔值.
我跑的PostgreSQL 9.0beta2此查询,并(除不必添加from mytable到SELECT语句,以及创建表tableA和tableB),并没有产生任何类型的错误.但是,我收到的错误消息很像您在运行以下内容时所描述的错误消息:
select case when true
then 1
else 'hello'::text
end;
Run Code Online (Sandbox Code Playgroud)
以上产量:
ERROR: CASE types text and integer cannot be matched
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14505 次 |
| 最近记录: |