如果值小于零,则返回零

时间:2016-02-18 15:28:55

标签: sql-server tsql

如果值小于零而不使用case语句,是否可以返回零?

e.g。 Max(a,0)< - 'Max'不存在。

我希望我的代码尽可能简洁。

1 个答案:

答案 0 :(得分:17)

只是为了好玩:

DECLARE @a INT = -3
SELECT COALESCE(NULLIF (ABS(@a), -@a), 0)

这篇文章只是提示CASE表达式是获得预期结果的更好选择。

毕竟,

NULLIF只是一种幻想CASE。上面的示例查询将(在执行计划中)扩展为:

CASE 
    WHEN 
        CASE 
            WHEN abs([@a])=( -[@a]) 
            THEN NULL 
            ELSE abs([@a]) 
        END IS NOT NULL 
    THEN 
        CASE 
            WHEN abs([@a])=( -[@a]) 
            THEN NULL 
            ELSE abs([@a]) 
        END 
    ELSE (0) 
END

合适的CASE表达式:

-- All versions
SELECT CASE WHEN @a > 0 THEN @a ELSE 0 END;

-- SQL Server 2012 or later
SELECT IIF(@a > 0, @a, 0);