这个问题来自我之前的帖子。
我很好奇为什么:
select * from TPM_USER where '' = ''
返回零行,但是:
select * from TPM_USER where 1 = 1
返回表中的每一行。这是每个 SQL 标准,还是 Oracle 特定的?
Oracle SQL 小提琴。
以下工作按预期进行:
PostgreSQL SQL 小提琴
SQL Server SQL 小提琴
mySQL SQL 小提琴
Oracle 不区分空字符串和NULL
.
这就是为什么推荐的字符串数据类型是VARCHAR2
而不是VARCHAR
:后者应该做这种区分,但目前没有。
在使用的三价逻辑中SQL
,NULL = NULL
(在 Oracle 中是 的同义词'' = ''
)评估为NULL
(not FALSE
but NULL
),因此被WHERE
子句过滤掉。
在 Oracle 中,空字符串等同于 NULL。您不使用=
NULL 值。