Microsoft SQL:CASE WHEN vs ISNULL/NULLIF

Chr*_*ein 5 sql-server null

除了可读性之外,在SQL中防止除以0错误时使用CASE WHEN语句与ISNULL/NULLIF有什么显着的好处?

CASE WHEN (BeginningQuantity + BAdjustedQuantity)=0 THEN 0 
ELSE EndingQuantity/(BeginningQuantity + BAdjustedQuantity) END
Run Code Online (Sandbox Code Playgroud)

VS

ISNULL((EndingQuantity)/NULLIF(BeginningQuantity + BAdjustedQuantity,0),0)
Run Code Online (Sandbox Code Playgroud)

And*_*mar 8

请记住,NULL与0不同.因此,问题中的两个代码片段可以为同一输入返回不同的结果.

例如,如果BeginningQuantity为NULL,则第一个表达式的计算结果为NULL:

CASE WHEN (NULL + ?)=0 THEN 0 ELSE ?/(NULL + ?) END
Run Code Online (Sandbox Code Playgroud)

Now(NULL +?)等于NULL,NULL = 0为false,因此计算ELSE子句,给出?/(NULL +?),结果为NULL.但是,第二个表达式变为:

ISNULL((?)/NULLIF(NULL + ?,0),0)
Run Code Online (Sandbox Code Playgroud)

这里是NULL +?变为NULL,并且因为NULL不等于0,所以NULLIF返回第一个表达式,即NULL.外部ISNULL捕获此并返回0.

所以,请下定决心:你是用零来防止divison,还是用NULL来区分?;-)