这个SQL查询是什么意思?

Saa*_*ail 1 sql t-sql sql-server sql-server-2000 coalesce

我有以下SQL查询:

select AuditStatusId 
from dbo.ABC_AuditStatus 
where coalesce(AuditFrequency, 0) <> 0
Run Code Online (Sandbox Code Playgroud)

我正在努力理解它.它看起来很简单,我知道coalesce运算符的作用(或多或少),但似乎没有得到意义.

除了上面的查询之外,如果不知道任何其他信息,您认为这意味着什么?

Mar*_*ith 13

select AuditStatusId 
from dbo.ABC_AuditStatus 
where AuditFrequency  <> 0 and AuditFrequency  is not null
Run Code Online (Sandbox Code Playgroud)

请注意,使用Coalesce意味着无法正确使用索引来满足此查询.

  • 并且你可以在大多数SQL版本中删除`并且AuditFrquency不为null",因为`auditFrequency <> 0`在`null`的情况下将返回unknown.并且不会返回`where`子句求值为unkown的行.(我所知道的唯一例外是SQL Server,它允许`null = null`为真的模式.这不是默认模式.) (4认同)
  • @Shannon - 好点它虽然可能更清楚但是多余的. (2认同)

OMG*_*ies 5

COALESCE是ANSI标准函数,用于处理NULL值,方法是返回基于逗号分隔列表的第一个非NULL值.这个:

WHERE COALESCE(AuditFrequency, 0) != 0
Run Code Online (Sandbox Code Playgroud)

..意味着如果列为AuditFrequencyNULL,则将值转换为零.否则,AuditFrequency返回值.

由于比较不返回AuditFrequency列值为零的行,AuditFrequency因此查询也将忽略其中为NULL的行.