Oracle SQL null加数字给出一个空值

时间:2013-06-07 16:15:30

标签: sql oracle10g

我正在使用(+操作)进行一些计算,但我看到我有一些空结果,我检查了数据库,我发现自己做了number+number+nul+number+null+number...=null之类的事情。这对我来说是个问题。

对我的问题有任何建议吗?如何解决这个国王的问题? 感谢

4 个答案:

答案 0 :(得分:13)

我的偏好是使用ANSI标准构造:

select coalesce(n1, 0) + coalesce(n2, 0) + coalesce(n3, 0) + . . .

NVL()特定于Oracle。 COALESCE()是ANSI标准,几乎在所有数据库中都可用。

答案 1 :(得分:4)

如果它们为null,则需要将这些值设为0,您可以使用nvl函数,例如

 SELECT NVL(null, 0) + NVL(1, 0) from dual;

NVL的第一个参数是你的专栏。

答案 2 :(得分:4)

您可以使用NVL之类的内容将null转换为值,例如0。

select NULL + 5 from dual;

将返回null

select NVL(NULL, 0) + 5 from dual;

将返回5

答案 3 :(得分:1)

刚刚意识到没有提到COALESCE()或NVL()的答案,我想澄清,因为它可能令人困惑(我最初认为它们是连接函数)。

因此,假设您要选择表中地点的完整地址,您有2个字段 - AddressLine1和AddressLine2。假设“AddressLine1”始终为NOT NULL,“AddressLine2”可以为NULL。那么你可能想写这样的东西:

(SQL Server):
SELECT AddressLine1 + COALESCE(AddressLine2, '')
FROM   Places

因此,对于AddressLine2 = NULL的条目,这不会为它返回NULL。

P.S。我想知道为什么在SQL中以这种方式设计plus操作,看起来真的违反直觉。