【问题标题】:SQL Server Check for IsNull and for ZeroSQL Server 检查 IsNull 和零
【发布时间】: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


    【解决方案1】:

    如果您使用的是 SQL Server,您或许可以使用 NULLIF 语句?
    即,如果是 0,则将值设置为 NULL,如果是 NULL,则将其设置为 1 - 应该同时捕获 0 和 NULL:

    SET @SomeVariable = @AnotherVariable/ISNULL(NULLIF(@VariableEqualToZero,0),1) - 1
    

    【讨论】:

    • +1 NULLIF() 是要走的路(它也是标准 SQL,所以我很想用 COALESCE() 替换 ISNULL() :)
    【解决方案2】:
    SET @SomeVariable = @AnotherVariable / COALESCE(
            CASE 
                 WHEN @VariableEqualToZero = 0 THEN 1
                 ELSE @VariableEqualToZero
            END, 1) - 1
    

    【讨论】:

    • 而不是 coalasce() 和 Case() 只是使用带有 isnull 的 CASE? ISNULL([@VariableEqualToZero],0) = 0 THEN 1
    【解决方案3】:
    set @SomeVariable = @AnotherVariable /
    (case when isnull(@VariableEqualToZero, 0) = 0 then 1 else
    @VariableEqualToZero end) - 1
    

    【讨论】:

      【解决方案4】:

      你使用 CASE

      而不是

      ISNULL(@VariableEqualToZero,1)
      

      使用

      CASE WHEN @VariableEqualToZero IS NULL OR @VariableEqualToZero = 0 THEN 1 ELSE @VariableEqualToZero END
      

      COALESCE 和 ISNULL 本质上只是 CASE 语句的快捷方式。 CASE的语法可以参考帮助。

      【讨论】:

        猜你喜欢
        • 2011-08-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        • 2017-05-13
        • 2018-09-19
        • 1970-01-01
        • 2017-04-19
        • 1970-01-01
        相关资源
        最近更新 更多