这个SQL查询是什么意思?

时间:2010-07-06 21:33:48

标签: sql sql-server tsql sql-server-2000 coalesce

我有以下SQL查询:

select AuditStatusId 
from dbo.ABC_AuditStatus 
where coalesce(AuditFrequency, 0) <> 0

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

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

6 个答案:

答案 0 :(得分:13)

select AuditStatusId 
from dbo.ABC_AuditStatus 
where AuditFrequency  <> 0 and AuditFrequency  is not null

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

答案 1 :(得分:5)

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

WHERE COALESCE(AuditFrequency, 0) != 0

..表示如果AuditFrequency列为NULL,则将值转换为零。否则,将返回AuditFrequency值。

由于比较不返回AuditFrequency列值为零的行,查询也将忽略AuditFrequency为NULL的行。

答案 2 :(得分:0)

看起来它的设计是将null AuditFrequency检测为零,从而隐藏这些行。

答案 3 :(得分:0)

从我所看到的,它检查不是0或null的字段。

答案 4 :(得分:0)

我认为这更准确地描述了:

select AuditStatusId 
from dbo.ABC_AuditStatus 
where (AuditFrequency IS NOT NULL AND AuditFrequency != 0) OR 0 != 0

我承认最后一部分永远不会做任何事情,也许我只是迂腐,但对我来说这更准确地描述了你的问题。

答案 5 :(得分:0)

这个想法是,使用单个表达式表达单个搜索条件是可取的,但它只是风格,品味问题:


一个表达方式:

WHERE age = COALESCE(@parameter_value, age);

两个表达式:

WHERE (
       age = @parameter_value
       OR
       @parameter_value IS NULL
      );

这是另一个例子:


一个表达方式:

WHERE age BETWEEN 18 AND 65;

两个表达

WHERE (
       age >= 18
       AND 
       age <= 65
      );

就个人而言,我对单个表达方式有强烈的个人偏好,并且发现它们更容易阅读...如果我熟悉所使用的模式;)它们表现不同是另一回事......