gpt4 book ai didi

Postgresql NOT NULL AND <> '' 与 NOT NULL OR <> ''

转载 作者:行者123 更新时间:2023-11-29 14:04:45 25 4
gpt4 key购买 nike

我已经阅读了很多关于NOT NULL 与 <>'' 之间的区别

我找到的最好的解释是:

https://www.postgresql.org/message-id/AANLkTilEsUTIeUkZCX9Vc14kciFiuvFBRRE-yen4K_Zi@mail.gmail.com其中指出:

NULL means the question hasn't been answered yet, thus there is no answer, there may be an answer once it is provided so you can't really say the answer is empty. Empty would mean the answer has been given and the answer is empty.

对于我正在处理的表,我试图过滤仅有效邮政编码的结果(邮政编码是这个特定表中的 VARCHAR),我尝试了以下操作:

SELECT postcode FROM customer_table_1 
WHERE postcode IS NOT NULL OR postcode <> '';

但是,这会在我的结果中提供一些空白的邮政编码。打破这个......

SELECT postcode FROM customer_table_1 
WHERE postcode IS NOT NULL;

给出一些空白的邮政编码而

SELECT postcode FROM customer_table_1 
WHERE postcode <>'';

只在结果中给出有效的邮政编码。因此,查询的 IS NOT NULL 部分没有按照我的想法进行。

作为更复杂查询的一部分,我以前使用过:

SELECT postcode FROM customer_table_1 
WHERE postcode IS NOT NULL AND postcode <> '';

并取得了预期的效果。不过我一直觉得应该是

SELECT postcode FROM customer_table_1 
WHERE postcode IS NOT NULL OR postcode <> '';

因为我要查找具有有效邮政编码(即不是 NULL 或非空字符串)的所有记录,所以这些记录不应与 OR 语句而不是 AND 连接吗?我不是在寻找既是 NULL 又是空字符串的邮政编码,只是其中之一。

抱歉,如果这是一个愚蠢的问题,使用 AND 对我来说似乎不合逻辑,我不想在不了解结果背后的过程的情况下盲目地做某事。我以为我完全理解 NOT NULL 和 <>'' 之间的区别,但是对于与 Postgres 相关的大多数事情,我越深入研究它就越意识到我实际上并不知道!

最佳答案

了解 De Morgan's Law 会让您受益匪浅这是 bool 逻辑的基础。

在这种情况下,您的情况不是您所表达的那样:

(NOT NULL) OR (NOT EMPTY)

但实际上是:

NOT (NULL OR EMPTY)

根据 De Morgan 展开实际上变成了:

(NOT NULL) AND (NOT EMPTY)

这就是为什么 AND 是正确的(实际上是“合乎逻辑的”)运算符。

关于Postgresql NOT NULL AND <> '' 与 NOT NULL OR <> '',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38829018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com