7

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

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

4

4 回答 4

14

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

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

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

于 2013-06-07T16:22:02.887 回答
4

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

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

NVL 的第一个参数将是您的列。

于 2013-06-07T16:18:47.720 回答
4

您可以使用类似NVL将 null 转换为值的方法,例如 0。

select NULL + 5 from dual;

将返回null

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

将返回5

于 2013-06-07T16:19:07.380 回答
1

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

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

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

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

PS我想知道为什么加号操作在SQL中是这样设计的,看起来真的很违反直觉。

于 2013-12-05T18:32:55.193 回答