ktm*_*124 1 sql oracle postgresql
我创建了以下 dbfiddle,您可以在其中看到该字段 <> ''排除了字段为空的情况。
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 <> '';
Run Code Online (Sandbox Code Playgroud)
我很惊讶地看到这一点,因为在大多数语言中 NULL 和 ''(空字符串)的处理方式不同。
上面的例子来自一个 PostgreSQL 数据库。在 Oracle 数据库上也是如此吗?PostgreSQL 和 Oracle 在什么情况下将 NULL 和 ''(空字符串)视为同一个东西?
NULL 和 '' ARE Postgres里被区别对待。
prd_chld_typ_cd <> ''
Run Code Online (Sandbox Code Playgroud)
返回NULL时prd_chld_typ_cd是NULL。这是大多数涉及 的操作的典型行为NULL。你会很容易发现:
prd_chld_typ_cd = ''
Run Code Online (Sandbox Code Playgroud)
当该列是 时,行为完全相同NULL。
对于任何其他值,表达式返回 true 或 false。如果您返回值,您将很容易看到这一点:
SELECT t.*, prd_chld_typ_cd <> ''
FROM test t;
Run Code Online (Sandbox Code Playgroud)
正在发生的事情是NULL在WHERE过滤器中以相同的方式处理和 false —— 都过滤掉了该行。
相比之下,NULL和''在 Oracle 中是同义词。但事实证明
prd_chld_typ_cd <> ''
prd_chld_typ_cd = ''
Run Code Online (Sandbox Code Playgroud)
当prd_chld_typ_cdis时,两者的行为方式相同NULL。唉,不过,在 Oracle 中,两者总是返回NULL——因为''等价于NULL.