Postgresql SQL:如何使用null和True,False值检查布尔字段?

时间:2015-10-28 04:52:54

标签: postgresql-9.1

在我的数据库表中,我有一个布尔列。其中有一些交易将是False,True和Null。

以下是我尝试过的案例:

案例:1

select * from table_name where
boolean_column is null;

运作良好。给出具有该列空值的所有事务的结果。

案例:2

select *from table_name where boolean_column = False;

运作良好。给出结果,所有事务的该列都具有False值。

案例:3 这是不起作用的要求。我希望所有事务的值都为False和Null。

我试过这些。

i)select *from table_name where boolean_column is False or Null;

只提供False的结果,它不会显示空记录。

ii)select *from table_name where boolean_column is Null or False;

*仅提供null的结果,它不显示具有False值的记录。 *

iii)select *from table_name where boolean_column is Null or boolean_column = False;

这只是显示所有交易都没有应用任何条件。

如何解决此问题。 任何指导意见。

先谢谢。

RGDS, 阿尼尔。

5 个答案:

答案 0 :(得分:34)

我在Postgres的内部工作方面不够专业,无法知道为什么WHERE子句中带有双重条件的查询无法正常工作。但解决这个问题的一种方法是使用你知道可以工作的两个查询中的UNION

SELECT * FROM table_name WHERE boolean_column IS NULL
UNION
SELECT * FROM table_name WHERE boolean_column = FALSE

您也可以尝试使用COALESCE

SELECT * FROM table_name WHERE COALESCE(boolean_column, FALSE) = FALSE

第二个查询会将所有NULL值替换为FALSE,然后在FALSE条件下与WHERE进行比较。

答案 1 :(得分:29)

PG中有3种状态的布尔值:true,false和unknown(null)。在此解释:Postgres boolean datatype

因此,您只需查询NOT TRUE:

SELECT * from table_name WHERE boolean_column IS NOT TRUE;

答案 2 :(得分:7)

在PostgreSQL上你可以使用:

SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)

答案 3 :(得分:4)

  1. select *from table_name where boolean_column is False or Null;

    被解释为"(boolean_column为False)或(null)"。

    它只返回boolean_column为假的行,因为第二个条件总是为假。

  2. select *from table_name where boolean_column is Null or False;

    同样的道理。解释为"(boolean_column为Null)或(False)"

  3. select *from table_name where boolean_column is Null or boolean_column = False;

    这个有效且返回2行:falsenull

  4. 我刚创建了表格以确认。你可能在某处打错了。

答案 4 :(得分:1)

重新启用此功能以发布DISTINCT FROM选项,此选项自Postgres 8起就出现了。该方法类似于Brad Dre的答案。在您的情况下,您的选择将类似于

SELECT *
  FROM table_name
 WHERE boolean_column IS DISTINCT FROM TRUE