如果值小于零而不使用case语句,是否可以返回零?
e.g。 Max(a,0)< - 'Max'不存在。
我希望我的代码尽可能简洁。
答案 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);