gpt4 book ai didi

sql - 在 PostgreSQL 和 Oracle 中,什么时候 NULL 和空字符串被同等对待?

转载 作者:行者123 更新时间:2023-11-29 14:08:50 24 4
gpt4 key购买 nike

我创建了以下 dbfiddle,您可以在其中看到 field <> '' 排除了 field 为 null 的情况。

https://www.db-fiddle.com/f/xdfayYMvdRZDRRASvGFdpT/0

CREATE TABLE test (
prd_typ_cd bpchar,
prd_prnt_typ_cd bpchar,
prd_chld_typ_cd bpchar
);
INSERT INTO test VALUES ('SHC', null, 'DIV');

INSERT INTO test VALUES ('DIV', 'SHC', 'DEP');

INSERT INTO test VALUES ('DEP', 'DIV', null);

SELECT * FROM test WHERE prd_chld_typ_cd <> '';

我很惊讶地看到这一点,因为在大多数语言中 NULL 和 ''(空字符串)的处理方式不同。

以上示例来自 PostgreSQL 数据库。在 Oracle 数据库上也是如此吗? PostgreSQL 和 Oracle 在什么情况下将 NULL 和 ''(空字符串)视为同一事物?

最佳答案

NULL '' ARE 在 Postgres 中被区别对待。

 prd_chld_typ_cd <> ''

prd_chld_typ_cdNULL 时,返回 NULL。这是大多数涉及 NULL 的操作的典型行为。你会很容易地发现:

 prd_chld_typ_cd = ''

当该列为 NULL 时表现完全相同。

对于任何其他值,表达式返回 true 或 false。如果您返回值,您会很容易看到这一点:

SELECT t.*, prd_chld_typ_cd <> ''
FROM test t;

发生的事情是 NULL 和 false 在 WHERE 过滤器中以相同的方式处理 - 都过滤掉该行。

相比之下,NULL'' 在Oracle 中是同义词。但事实证明

 prd_chld_typ_cd <> ''
prd_chld_typ_cd = ''

prd_chld_typ_cdNULL 时,两者的行为相同。遗憾的是,在 Oracle 中,总是 返回 NULL —— 因为 '' 等同于 NULL

关于sql - 在 PostgreSQL 和 Oracle 中,什么时候 NULL 和空字符串被同等对待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52564383/

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