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

我正在我的 web 应用程序中运行以下 SQL 查询:

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

我期望得到 true(布尔数据)作为结果,但是我得到了 't' 或 'f' 表示 false。 我该如何使其返回标准布尔值到我的 Lua 代码?

我找到了以下的帖子:

从 PHP 正确地读取 Postgres 中的布尔值

因此,我试图将我的代码更改为以下内容:

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'?

谢谢。

点赞
用户1545777
用户1545777

尝试使用CASE方法:

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

我的测试fiddle

2013-07-23 14:30:26
用户2588368
用户2588368

你很接近了

SELECT EXISTS (SELECT id FROM user WHERE membership=1244)::int
2013-07-23 15:28:11
用户131874
用户131874

你的第一次查询确实返回了一个布尔值。查询的返回值为 t

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

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

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

你需要查看 Lua 的 PostgreSQL 驱动程序手册,以了解如何正确处理它。

2013-07-23 16:00:59
用户15785
用户15785

你的初始查询本身就没问题:

SELECT id FROM user WHERE membership=1244

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

2013-07-23 17:40:11