除了可读性之外,在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)
请记住,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来区分?;-)