当前位置: 首页 > 知识库问答 >
问题:

返回布尔值为真或假选择(PostgreSQL/pgAdmin)

狄玉书
2023-03-14

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

顺便说一句,根据PostgreSQL自己的文档,这种行为不是SQL标准。

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

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

共有2个答案

家西岭
2023-03-14

一个简单的转换为text就可以完成这项工作(除非您需要大写拼写):

SELECT true::text AS t, false::text AS f;

 t    | f
------+-------
 true | false

否则,文本表示取决于用于连接的库和客户端。例如,JDBC将boolean值呈现为'true'/'false'

分贝

你会喜欢Postgres 9.5中的这个变化(引用发行说明):

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

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

大胆强调我的。

宣冥夜
2023-03-14

如果您只想显示文本TRUEFALSE,那么您可以像建议的那样使用case语句。由于PostgreSQL将TRUETRUEyesonyt1视为TRUE,因此我可以控制输出的外观。

其中子句可以写成:

select * from tablename where active
--or--
select * from tablename where active = true

(我的建议与PostgreSQL相同-使用true)

选择时,尽管可能会犹豫是否使用case语句,但我仍然建议这样做,以便控制输出字符串文字。

您的查询如下所示:

select 
  case when 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 |
 类似资料:
  • 如何在SQL Select语句上返回布尔值? 我尝试了以下代码: 并且它只返回如果存在于表中。如果表中不存在UserID,我希望它返回。

  • 问题内容: 我遇到了这种语法: 这个带有两个点的语法是什么? 在哪里可以找到有关它的信息? 它仅适用于布尔值还是以其他不同方式实现? 问题答案: 是条件运算符。(不只是一部分,整个方法参数是示例中条件运算符的一种用法。) 它通常被称为三元运算符,但这只是其本质的一个方面-具有三个操作数- 而不是其名称。如果在Java中引入了另一个三元运算符,则该术语将变得模棱两可。之所以称为条件运算符,是因为它有

  • 我正在我的web应用程序中运行以下sql查询: 我期望结果为true(布尔数据),但我得到的是false的t或f。我如何让它返回到我的lua代码一个标准的布尔值? 我发现了以下帖子: 用PHP正确读取Postgres中的布尔值 所以我试着把代码改成这样: 或 但是我有一个语法错误<你能告诉我最好的处理方法吗?我是否应该以某种方式将结果“t”转换为布尔值?或者有没有办法告诉postgresql返回t

  • 我试图返回一个“矩阵”或2D数组,其中布尔值根据旁边有多少个“真”值变成1-4之间的数字。我以前尝试过一种不同的方法,下面是当前的代码。 问题是: 当矩阵=[[true,false,false],[false,true,false],[false,false,false]] 输出应该是[[1,2,1],[2,1,1],[1,1,1]] 我的代码: 我的错误/结果: 输入矩阵:[[true,fals

  • 问题内容: 关于以下原因为何的任何想法。 当我将request_url粘贴到浏览器中时,我会获取json数据,但是如果我在php中尝试,则var_dump就是bool(false); 有任何想法吗?? 更新并修复 OK伙计们,感谢您的所有帮助。是的,我帮助我追踪了这一情况。事实证明,php.ini配置为禁止打开url,因此file_get_contents无法正常工作。我在各个站点上发现了以下方便

  • 好的,我的问题是关于布尔返回。对于我的Comp-Sci作业,我必须使用多种方法制作一个课程注册程序,其中之一就是添加课程方法。基本上,在目录中搜索类,如果匹配,则将其添加到学生计划中,并返回布尔值true。我这么做了,但出于某种原因,这给了我一个错误。以下是代码: 为什么它不能识别布尔返回值?是因为我把它们放在了一个圈里吗?