回答
只是为了好玩:
DECLARE @a INT = -3
SELECT COALESCE(NULLIF (ABS(@a), [email protected]), 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);
@PaulWhite:使用这个简单版本的另一个原因是:'SELECT CASE WHEN @a <0 THEN 0 ELSE @a END' –
@TimSchmelter是的,虽然要小心正确处理NULL输入。 (我认为结果应该是0,而不是NULL)。 –
处理NULL的替代表达式:'@A *((Sign(@A)+ 1)/ 2)' – HABO
- 1. 如果不存在零,则返回零值
- 2. 相同小区内的返回文本,如果值小于零
- 3. Ruby:如果方法返回非零值,则返回
- 4. 如果为NULL,则返回零
- 5. 如果值为零,则默认为零
- 6. SQL返回值如果不为空,则返回零,如果为空
- 7. R:如果列有少于3个零聚合数据帧,否则返回零
- 8. 零,如果没有返回值
- 9. 表值返回零?
- 10. 如果不存在零值,则只会返回SQL记录
- 11. 如果,Elseif,否则与多个查询返回零值
- 12. 如果另一个表具有零值,则表不会返回
- 13. 如果值不存在,则R中的表()需要返回零
- 14. 如果精度值小于刻度,则填零0
- 15. 如果后续值不为零,则将pandas零值替换为非零值
- 16. elisp:如果符号有一个值返回它,否则返回零
- 17. YouTube API返回零结果
- 18. Scrapy返回零结果
- 19. 如果大于或小于零
- 20. 如果零为零则向左移动
- 21. 如果为零,则显示零
- 22. 返回零对零IEnumerables
- 23. 总是返回零值
- 24. 返回零不是值
- 25. 零交叉返回高值
- 26. rand()只返回零值
- 27. 处理SetWindowsHookEx零返回值
- 28. 云函数返回零值
- 29. 设置包值返回零
- 30. pthreads_create()返回非零值?
为什么你不希望使用的情况下表达。这几乎是他们所做的。 –
它的问题! –
另请参见:[在SQL Server 2008中的函数类似于MySQL中的GREATEST?](http://stackoverflow.com/questions/4725823/function-in-sql-server-2008-similar-to-greatest-in-mysql) –