6

这个问题来自我之前的帖子

我很好奇为什么:

select * from TPM_USER where '' = ''

返回零行,但是:

select * from TPM_USER where 1 = 1

返回表中的每一行。这是每个 SQL 标准,还是 Oracle 特定的?

Oracle SQL 小提琴

以下工作按预期进行:

PostgreSQL SQL 小提琴

SQL Server SQL 小提琴

mySQL SQL 小提琴

4

2 回答 2

7

Oracle 不区分空字符串和NULL.

这就是为什么推荐的字符串数据类型是VARCHAR2而不是VARCHAR:后者应该做这种区分,但目前没有。

在使用的三价逻辑中SQLNULL = NULL(在 Oracle 中是 的同义词'' = '')评估为NULL(not FALSEbut NULL),因此被WHERE子句过滤掉。

于 2012-06-07T17:54:41.157 回答
6

在 Oracle 中,空字符串等同于 NULL。您不使用=NULL 值

于 2012-06-07T17:47:17.003 回答