2012-03-27 106 views
7

鉴于表:SQL查询添加两列包含空值的值?

 
    ID ONE TWO 
    X1 15 15 
    X2 10 - 
    X3 -  20 

这个查询:

SELECT (ONE + TWO) FROM (TABLE) 

只是返回X1的值,但不是别人的总和,因为至少有一个列有一个空值。即使存在空值,我仍然可以添加它们吗?即认为null为0也许?

回答

10
SELECT (COALESCE(ONE, 0) + COALESCE(TWO, 0)) FROM (TABLE) 

COALESCE将返回参数中的第一个非空值,从左到右。所以,当第一个字段为空,它会采取0

这样,X2将导致10 + 0 = 10

1

已经有一个很好的答案,但我认为这是值得一提的antonpug(以他不知道)这种情况发生的原因是NULL不是一个可以比较或总结的值。

NULL不为0或 ''(空字符串),所以涉及NULL每一个操作会导致NULL(10 + NULL = NULL),连(NULL = NULL)将评估为FALSE

+1

我知道。谢谢! – antonpug 2012-03-27 18:54:42

+1

在Oracle中,空字符串为NULL。这与标准和其他RDBM不同。在Oracle中''选择'真'从双'其中''为空'返回true和'选择真'从双'其中'='''不返回一行。正因为如此,如果双方都为空,连接运算符'||'只会返回null。 '选择null ||'Hello World!' from dual'给出字符串“Hello World!”。 – 2012-03-27 19:18:38