在Select(PostgreSQL / pgAdmin)中将布尔值返回为TRUE或FALSE

时间:2015-12-23 16:36:08

标签: sql postgresql boolean

在PostgreSQL(版本9.4,pgAdmin3)中,当对具有布尔列的表执行select时,数据输出显示“t”或“f”。我想在没有编写CASE语句或进行JOINS等的情况下将布尔值转换为真或假为FALSE。

BTW,根据PostgreSQL自己的documentation,这种行为不是SQL标准。

  

关键字TRUE和FALSE是首选(符合SQL)用法。

PS:只有在pgAdmin中使用SQL编辑器时才会发生这种情况。使用pgAdmin对象浏览器,向下钻取到同一个表,右键单击,查看数据,查看前100行,相同的布尔列显示为TRUE或FALSE,符合预期/标准。

2 个答案:

答案 0 :(得分:17)

如果要显示的只是文字TRUEFALSE,则可以使用您提议的案例陈述。由于PostgreSQL将TRUEtrueyesonyt1视为真,因此; 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'无论如何:

SQL Fiddle.

你会喜欢Postgres中的这种变化 9.5 (引用release notes):

  
      
  • 在PL / pgSQL中使用赋值转换行为进行数据类型转换   分配,而不是转换为文本(Tom Lane)

         

    此更改会导致布尔队员的转换为字符串以生成true   或false,而非tf 。其他类型的转换可能在更多情况下成功   比以前;例如,将数值3.9分配给整数   变量现在将分配4而不是失败。如果没有作业等级   cast是针对特定的源和目标类型定义的,   PL / pgSQL将回退到旧的I / O转换行为。

  •   

大胆强调我的。