2

在下面的示例中,为什么在 oracle 11g 中除了“NAME1”之外都给出 null 作为结果。

如果我明确提到空间,它会占用空间,否则 null 不是空字符串。请帮助我澄清这一点。

在 NAME2 中,我指定了空白空间,但它仍然给出了 null。

select 
NVL(NAME,' ') AS NAME1,
NVL(NAME,'') AS NAME2,
NVL(NAME,NULL) AS NAME3,
NAME AS NAME4 
from employee

输出 :

(空格),null,null,null

4

3 回答 3

8

因为在 Oracle 中,零长度的 varchar 被视为 NULL。

在你的例子中

NVL(NAME, ' ') AS NAME1 will evaluate to either NAME or ' ' - empty string.
NVL(NAME, '') as NAME2 will evaluate to either NAME or a zero length string
于 2013-03-12T09:44:45.240 回答
3

因为 '' 等于 oracle 中的 null。例如这两个查询是相同的:

update  test set name=''  where id = 15
update  test set name=null   where id = 15
于 2013-03-12T10:59:30.470 回答
1

原因是在 Oracle 中,一个空字符串等价于NULL.

您可以通过执行以下查询看到这是真的

SELECT 'x' FROM DUAL WHERE '' IS NULL

这应该返回一行,这意味着条件'' IS NULLtrue

于 2013-03-12T09:43:40.093 回答