如果值小于零,则返回零

Ian*_*ton 0 t-sql sql-server

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

例如Max(a,0)< - 'Max'不存在.

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

Gio*_*sos 18

纯娱乐:

DECLARE @a INT = -3
SELECT COALESCE(NULLIF (ABS(@a), -@a), 0)
Run Code Online (Sandbox Code Playgroud)

这篇文章只是提示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
Run Code Online (Sandbox Code Playgroud)

合适的CASE表达方式:

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

-- SQL Server 2012 or later
SELECT IIF(@a > 0, @a, 0);
Run Code Online (Sandbox Code Playgroud)