【问题标题】:postgres: Why does SELECT NULL <> '' return FALSE?postgres:为什么 SELECT NULL <> '' 返回 FALSE?
【发布时间】:2020-01-09 00:44:46
【问题描述】:

我最近在一个包含字符串、空字符串和空值的数据列上运行查询。 我想保留除空字符串之外的所有内容,所以我很自然地做了类似的事情

WHERE my_row <> ''

但是我发现这也删除了我的空值。 :(

我随便找了找

SELECT NULL = ''  -- Returns False. No surprise here

但是

SELECT NULL <> ''  -- Also returns False. Huh?

谁能给我解释一下?

【问题讨论】:

    标签: postgresql null


    【解决方案1】:

    结果是,每当您对 NULL 执行标准比较运算符时,您会得到 FALSE、NOT TRUE 或 NULL。

    如果要对包含 NULL 的列进行比较,可以使用 IS [NOT] DISTINCT FROM 代替 =&lt;&gt;,它会将 NULL 视为一个值。

    我使用了以下内容,它删除了我的空字符串而不删除我的 NULLs

    WHERE my_row IS DISTINCT FROM ''
    

    https://www.postgresql.org/docs/current/functions-comparison.html

    【讨论】:

    • 这是因为当涉及 NULL 时,您不再查看结果始终为 True、False 的二进制(布尔)2 状态逻辑。使用空值,您正在处理结果为 True、False 或 Null 的三态或三态逻辑。对 Null 应用的任何比较运算符都会导致 Null。
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 2013-09-18
    • 2021-05-24
    相关资源
    最近更新 更多