我使用CTE来计算日志中时间段,如此代码片段所示:
http://www.sqlfiddle.com/#!3/b99448/6
请注意,其中一行具有NULL
值,因为那是最近的日志条目,无法进行任何计算。然而,如果我对这些结果进行
SUM
,那么NULL
将被视为零:
http://www.sqlfiddle.com/#!3/b99448/4
我该如何让它停止忽略 NULL 值? 由于正在添加一个 NULL 值,所以我期望总和为NULL
。我使用CTE来计算日志中时间段,如此代码片段所示:
http://www.sqlfiddle.com/#!3/b99448/6
请注意,其中一行具有NULL
值,因为那是最近的日志条目,无法进行任何计算。SUM
,那么NULL
将被视为零:
http://www.sqlfiddle.com/#!3/b99448/4
我该如何让它停止忽略 NULL 值? 由于正在添加一个 NULL 值,所以我期望总和为NULL
。NULL
值,它们不被视为0
——这一区别对于AVG()
、MIN()
和MAX()
更为重要。因此,只有当所有值都是NULL
时,SUM()
才返回NULL
。NULL
,可以使用以下简单表达式:select (case when count(*) = count(a.DateTimeChangedUtc) and
count(*) = count(b.DateTimeChangedUTC)
then SUM(DATEDIFF(SECOND, a.DateTimeChangedUtc, b.DateTimeChangedUTC))
end) AS TimeSpentSeconds
如果任意一个参数为NULL
,则此函数返回NULL
。
sum()
(或任何聚合函数)的定义方式:它们会忽略NULL
值。在SQL标准中,1、2、null、3的总和按照定义为1+2+3=6。 - user330315