我有以下SQL查询:
select AuditStatusId
from dbo.ABC_AuditStatus
where coalesce(AuditFrequency, 0) <> 0
我正在努力理解它。它看起来很简单,我知道coalesce运算符的作用(或多或少),但似乎没有得到意义。
除了上面的查询之外,不知道任何其他信息,您认为这意味着什么?
答案 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
);
就个人而言,我对单个表达方式有强烈的个人偏好,并且发现它们更容易阅读...如果我熟悉所使用的模式;)它们表现不同是另一回事......