在PostgreSQL(版本9.4,pgAdmin3)中,当对具有布尔列的表执行select时,数据输出显示't'或'f'.我想在没有编写CASE语句或JOINS等的情况下将布尔值转换为TRUE或FALSE.
BTW,根据PostgreSQL自己的文档,这种行为不是SQL标准.
关键字TRUE和FALSE是首选(符合SQL)用法.
PS:只有在pgAdmin中使用SQL编辑器时才会发生这种情况.使用pgAdmin对象浏览器,向下钻取到同一个表,右键单击,查看数据,查看前100行,相同的布尔列显示为TRUE或FALSE,如预期/标准.
如果您要显示的只是文字TRUE
或者FALSE
,您可以使用您提议的案例陈述.因为PostgreSQL对待TRUE
,true
,yes
,on
,y
,t
和1
为真,我会控制我怎么会想输出的样子.
Where子句可以写成:
select * from tablename where active --or-- select * from tablename where active = true
(我的建议与PostgreSQL相同 - 使用true)
在选择时,虽然可能会犹豫使用case语句,但我仍然建议这样做以控制输出字符串文字.
您的查询将如下所示:
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 |
一个简单的演员来text
完成这项工作(除非你需要大写拼写):
SELECT true::text AS t, false::text AS f; t | f ------+------- true | false
否则,文本表示取决于您用于连接的库和客户端.例如,JDBC将boolean
值呈现为'true'/'false':
SQL小提琴.
你会喜欢Postgres 9.5(目前的候选版本)中的这一变化:
在PL/pgSQL分配中使用赋值转换行为进行数据类型转换,而不是在文本中转换和转换(Tom Lane)
这种变化会导致对字符串布尔型转换为生产
true
或false
不t
或f
.其他类型的转换可能比以前更多的情况下成功; 例如,将数值3.9
赋给整数变量现在将分配4
而不是失败.如果没有为特定的源和目标类型定义任务等级强制转换,PL/pgSQL将回退到其旧的I/O转换行为.
大胆强调我的.