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

Ani*_*iya 28 postgresql-9.1

在我的数据库表中,我有一个布尔列.其中有一些事务将是False,True和Null.

这些是我尝试过的案例:

情况1

select * from table_name where
boolean_column is null;
Run Code Online (Sandbox Code Playgroud)

效果很好.给出具有该列的空值的所有事务的结果.

案例:2

select *from table_name where boolean_column = False;
Run Code Online (Sandbox Code Playgroud)

效果很好.给出该列的所有事务都具有False值的结果.

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

我试过这些.

一世) 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值的记录.*

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

这只是显示所有事务都没有应用任何条件.

如何解决此问题.任何指导赞赏.

提前致谢.

Rgds,Anil.

Bra*_*Dre 40

PG中的布尔值有3种状态:true,false和unknown(null).这里解释:Postgres布尔数据类型

因此,您只需查询NOT TRUE:

SELECT * from table_name WHERE boolean_column IS NOT TRUE;
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案 (2认同)

Tim*_*sen 38

我对Postgres的内部工作方式不够专业,不知道为什么你的查询在WHERE子句中的双重条件不起作用.但解决这个问题的一种方法是使用UNION你知道可以工作的两个查询中的一个:

SELECT * FROM table_name WHERE boolean_column IS NULL
UNION
SELECT * FROM table_name WHERE boolean_column = FALSE
Run Code Online (Sandbox Code Playgroud)

您也可以尝试使用COALESCE:

SELECT * FROM table_name WHERE COALESCE(boolean_column, FALSE) = FALSE
Run Code Online (Sandbox Code Playgroud)

第二个查询将替换所有NULL值,FALSE然后FALSEWHERE条件中进行比较.


sho*_*shi 8

恢复此选项以发布该选项,该选项自Postgres 8DISTINCT FROM以来就已存在。该方法类似于 Brad Dre 的答案。在你的情况下,你的选择会是这样的

SELECT *
  FROM table_name
 WHERE boolean_column IS DISTINCT FROM TRUE
Run Code Online (Sandbox Code Playgroud)


Dmi*_*lov 7

在PostgreSQL上,您可以使用:

SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 6

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

    被解释为“( boolean_column is False ) or (null)”。

    它仅返回boolean_column为 False 的行,因为第二个条件始终为假。

  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

我刚刚创建了表格来确认。您可能在某处打错了字。