在 postgresql 查询中检查布尔真/假结果

Posted

技术标签:

【中文标题】在 postgresql 查询中检查布尔真/假结果【英文标题】:checking for boolean true / false result in postgresql query 【发布时间】:2013-07-23 13:54:15 【问题描述】:

我正在我的网络应用程序中运行以下 sql 查询:

SELECT EXISTS (
SELECT id
FROM user
WHERE membership=1244)

我期待 true(布尔数据)作为结果,但我得到 't' 或 'f' 为 false。 如何让它返回到我的 lua 代码标准布尔值?

我找到了以下帖子:

Reading boolean correctly from Postgres by php

所以我试着把我的代码改成这样:

SELECT EXISTS ::int (
SELECT id
FROM user
WHERE membership=1244)

SELECT ::INT (SELECT EXISTS (
SELECT id
FROM user
WHERE membership=1244))

但我遇到了语法错误。 你能说出处理这个问题的最佳方法吗?我应该以某种方式将生成的“t”转换为布尔值吗?或者有没有办法告诉 postgresql 返回 true / false 而不是 't'/'f'?

谢谢。

【问题讨论】:

【参考方案1】:

你很亲密

SELECT EXISTS (SELECT id FROM user WHERE membership=1244)::int 

【讨论】:

在 Postgres 9.1.9 中,它运行良好。请参阅sqlfiddle.com/#!1/bfe1e/2 此外,PHP 的 0 或 1 用作布尔值 没问题。你给了我一个使用 sqlfiddle 的借口。我今天才知道的,所以我很兴奋。 :)【参考方案2】:

您的第一个查询确实返回了一个布尔值。 t 显示为查询的返回值

select exists (select 1);
 exists 
--------
 t

但是如果你检查它的类型,它是一个布尔值:

select pg_typeof(exists (select 1));
 pg_typeof 
-----------
 boolean

您必须查看 lua 的 postgresql 驱动程序手册如何正确处理它。

【讨论】:

【参考方案3】:

CASE试试吧

select       
  (case when exists (SELECT id FROM user WHERE membership = 1244)
    then 1 
    else 0 
  end) as column;

my test fiddle

【讨论】:

我不知道 sqlfiddle 存在。谢谢!【参考方案4】:

您的初始查询本身就很好:

SELECT id FROM user WHERE membership=1244

你只需要检查它是否返回一行。

【讨论】:

以上是关于在 postgresql 查询中检查布尔真/假结果的主要内容,如果未能解决你的问题,请参考以下文章

在c中将布尔结果打印为“假”或“真”的最佳方法?

在c中将布尔结果打印为“假”或“真”的最佳方法?

PHP检查变量是真还是假[重复]

如何读取数组中所有函数的布尔值(真/假)

c#:比较office文档,如果文件相同,只获得真/假结果

Ruby:如何将字符串转换为布尔值