ISNULL
使用指定的替换值替换 NULL。语法
ISNULL ( check_expression , replacement_value )参数
check_expression 将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。 replacement_value 在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。返回类型
返回与 check_expression 相同的类型。注释
如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。NULLIF
如果两个指定的表达式相等,则返回空值。语法
NULLIF ( expression , expression )参数
expression 常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组合。返回类型
返回类型与第一个 expression 相同。 如果两个表达式不相等,NULLIF 返回第一个 expression 的值。如果相等,NULLIF 返回第一个 expression 类型的空值。注释
如果两个表达式相等且结果表达式为 NULL,NULLIF 等价于 CASE 的搜索函数。 从以上的红字信息我们可以发现: 1、两个函数的返回值都是特定类型的,就算是空值,也是特定类型的,也就是说是特定的数据类型和长度(特别是字符串类型的长度)的。 2、使用两个函数的组合可以让SQL代码精简并可替代Case语句 下面给出一些示例供大家参考,请大家在使用中注意: SELECT HopeBe_0 = ISNULL(NULLIF('',''),0) --返回 * --说明:显然这里已经违反了 ISNULL 的 要求了(红字部分), --且0转成字符串的长度为1,而''的长度为0 SELECT HopeBe_0 = ISNULL(NULLIF(' ',' '),0) --返回 0 --说明:这里虽然已经违反了 ISNULL 的 要求了(红字部分), --但是0转成字符串的长度为1,而' '的长度为也为1 SELECT HopeBe_Empty = ISNULL(ISNULL('',''),0) --返回 '' --说明:这个可以理解吧 SELECT HopeBe_n_0 = ISNULL(NULLIF('',''),'0000') --返回 '' --说明:这个比较经典,请往下看 SELECT HopeBe_n_0 = ISNULL(NULLIF('x','x'),'0000') --返回 0 SELECT HopeBe_n_0 = ISNULL(NULLIF('xx','xx'),'0000') --返回 00 SELECT HopeBe_n_0 = ISNULL(NULLIF('xxx','xxx'),'0000') --返回 000 SELECT HopeBe_n_0 = ISNULL(NULLIF('xxxx','xxxx'),'0000') --返回 0000 SELECT HopeBe_n_0 = ISNULL(NULLIF('xxxxx','xxxxx'),'0000') --返回 0000 至于替代 case 的示例靠大家领会,我只给了我经常用的小片: ... IsNull(NullIf(count(ID),0),1) --说明:这是为了防止除0和除NULL本文出自 “黄毅坚” 博客,请务必保留此出处http://edgenhuang.blog.51cto.com/47333/145577