【发布时间】:2009-02-24 03:32:14
【问题描述】:
我有以下几点:
set @SomeVariable = @AnotherVariable/isnull(@VariableEqualToZero,1) - 1
如果@VariableEqualToZero 为null,它会替换1。如果@VariableEqualToZero = 0,我也需要它替换1。我该怎么做呢?
【问题讨论】:
标签: sql sql-server isnull divide-by-zero
我有以下几点:
set @SomeVariable = @AnotherVariable/isnull(@VariableEqualToZero,1) - 1
如果@VariableEqualToZero 为null,它会替换1。如果@VariableEqualToZero = 0,我也需要它替换1。我该怎么做呢?
【问题讨论】:
标签: sql sql-server isnull divide-by-zero
如果您使用的是 SQL Server,您或许可以使用 NULLIF 语句?
即,如果是 0,则将值设置为 NULL,如果是 NULL,则将其设置为 1 - 应该同时捕获 0 和 NULL:
SET @SomeVariable = @AnotherVariable/ISNULL(NULLIF(@VariableEqualToZero,0),1) - 1
【讨论】:
NULLIF() 是要走的路(它也是标准 SQL,所以我很想用 COALESCE() 替换 ISNULL() :)
SET @SomeVariable = @AnotherVariable / COALESCE(
CASE
WHEN @VariableEqualToZero = 0 THEN 1
ELSE @VariableEqualToZero
END, 1) - 1
【讨论】:
set @SomeVariable = @AnotherVariable /
(case when isnull(@VariableEqualToZero, 0) = 0 then 1 else
@VariableEqualToZero end) - 1
【讨论】:
你使用 CASE
而不是
ISNULL(@VariableEqualToZero,1)
使用
CASE WHEN @VariableEqualToZero IS NULL OR @VariableEqualToZero = 0 THEN 1 ELSE @VariableEqualToZero END
COALESCE 和 ISNULL 本质上只是 CASE 语句的快捷方式。 CASE的语法可以参考帮助。
【讨论】: