在PostgreSQL(版本9.4,pgAdmin3)中,当对具有布尔列的表执行select时,数据输出显示“t”或“f”。我想在没有编写CASE语句或进行JOINS等的情况下将布尔值转换为真或假为FALSE。
BTW,根据PostgreSQL自己的documentation,这种行为不是SQL标准。关键字TRUE和FALSE是首选(符合SQL)用法。
PS:只有在pgAdmin中使用SQL编辑器时才会发生这种情况。使用pgAdmin对象浏览器,向下钻取到同一个表,右键单击,查看数据,查看前100行,相同的布尔列显示为TRUE或FALSE,符合预期/标准。
答案 0 :(得分:17)
如果要显示的只是文字TRUE
或FALSE
,则可以使用您提议的案例陈述。由于PostgreSQL将TRUE
,true
,yes
,on
,y
,t
和1
视为真,因此; d控制我希望输出看起来像。
Where子句可以写成:
select * from tablename where active
--or--
select * from tablename where active = true
(我的推荐与PostgreSQL相同 - 使用true)
在选择时,虽然可能会犹豫使用案例陈述,但我仍然建议您这样做以控制输出字符串文字。
您的查询将如下所示:
select
case active = TRUE then 'TRUE' else 'FALSE' end as active_status,
...other columns...
from tablename
where active = TRUE;
SQLFiddle示例:http://sqlfiddle.com/#!15/4764d/1
create table test (id int, fullname varchar(100), active boolean);
insert into test values (1, 'test1', FALSE), (2, 'test2', TRUE), (3, 'test3', TRUE);
select
id,
fullname,
case when active = TRUE then 'TRUE' else 'FALSE' end as active_status
from test;
| id | fullname | active_status |
|----|----------|---------------|
| 1 | test1 | FALSE |
| 2 | test2 | TRUE |
| 3 | test3 | TRUE |
答案 1 :(得分:10)
对text
的简单转换将完成这项工作(除非你需要大写拼写):
SELECT true::text AS t, false::text AS f;
t | f
------+-------
true | false
否则,文本表示取决于您用于连接的库和客户端。例如,JDBC将boolean
值呈现为' true' /' false'无论如何:
你会喜欢Postgres中的这种变化 9.5 (引用release notes):
在PL / pgSQL中使用赋值转换行为进行数据类型转换 分配,而不是转换为文本(Tom Lane)
此更改会导致布尔队员的转换为字符串以生成
true
或false
,而非t
或f
。其他类型的转换可能在更多情况下成功 比以前;例如,将数值3.9
分配给整数 变量现在将分配4
而不是失败。如果没有作业等级 cast是针对特定的源和目标类型定义的, PL / pgSQL将回退到旧的I / O转换行为。
大胆强调我的。