空值处理
coalesce( expression [ ,...n ] )返回其参数中第一个非空表达式。
Select coalesce(
null
,
null
,
'
1
'
,
'
2
'
) //结果为 1
coalesce(expression1,...n) 与此 case函数等效:
CASE
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL
END
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL
END
注意:
当第一个表达式为字符串且不能转化为整数时,若在后面的表达式中有整数,这样的语句是会报错的。
例如:
Select COALESCE(
'
a
'
,
null
,
'
1
'
,
2
) //这是错误的
这相当于
select
CASE
WHEN ( ' a ' IS NOT NULL) THEN ' a '
WHEN ( 2 IS NOT NULL) THEN 2
ELSE NULL
END //会出现错误,因为系统无法将a转换为相应的整数
CASE
WHEN ( ' a ' IS NOT NULL) THEN ' a '
WHEN ( 2 IS NOT NULL) THEN 2
ELSE NULL
END //会出现错误,因为系统无法将a转换为相应的整数
但是
select
CASE
WHEN ( ' a ' IS NOT NULL) THEN ' a '
WHEN ( 2 IS NOT NULL) THEN ' 2 '
ELSE NULL
END //这是正确的
CASE
WHEN ( ' a ' IS NOT NULL) THEN ' a '
WHEN ( 2 IS NOT NULL) THEN ' 2 '
ELSE NULL
END //这是正确的
所以我们在使用coalesce函数时,应该相当小心。
isnull( check_expression , replacement_value ) 使用指定的替换值替换 NULL。
replacement_value 必须是可以隐式转换为 check_expresssion 类型的类型。
在表stu中
select isnull(ssex,
'
p
'
) from stu //若ssex列中有NULL值,那么返回p
nullif( expression , expression ) 如果两个指定的表达式相等,则返回空值,否则 NULLIF 返回第一个 expression 的值。
select nullif(
1
,
1
) //结果为 NULL
select nullif( 1 , 2 ) //结果为 1
select nullif( 1 , 2 ) //结果为 1