IsNull 和 NullIf 双剑合璧
原创
©著作权归作者所有:来自51CTO博客作者jacksoft_edgen的原创作品,请联系作者获取转载授权,否则将追究法律责任
首先看看SQL SERVER 联机丛书的信息,其中我们该注意的地方我用红字标出:
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
语法
参数
返回类型
注释
如果两个表达式相等且结果表达式为 NULL,NULLIF 等价于 CASE 的搜索函数。
如果两个指定的表达式相等,则返回空值。
语法
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
上一篇:JSON-RPC-Java 指南
下一篇:我的友情链接

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
区块链+AI,恰似双剑合璧?
两招名称相同,招式却是大异,一招是全真剑法的厉害剑招,一着是玉女剑法的险恶家数,双剑合璧。
区块链 数据 人工智能 数据存储 百度 -
双剑合璧——ospf虚链路与路由聚合
本期,笔者将和您一同探讨OSPF虚链路与路由聚合的组合。
组网 职场 休闲 路由聚合 ospf虚链路 -
Windows 7与Windows Server双剑合璧 提升业绩
“在动态IT平台中,Windows服务器是它的核心。Windows服务器的操作系统无论对企业级用户还是中间级别的市场,还是针对小企业市场,从世界范围来看是使用范围最多、市场占有率最大的一款产品。”
微软 Windows Server Windows7 虚拟化技术 -
Kafka和Flink双剑合璧,Confluent收购Immerok引起业内广泛讨论
云原生Kafka+云原生Flink,Confluent收购Flink创始团队创建的公司Immerok,双剑合璧,前途无量。
kafka flink Apache 开源软件 开发者 -
MarkDown、Vim双剑合璧
作为一名软件攻城狮(是的,我从来都以攻城狮自居!我坚信如今的每一天
vim 元编程 微信公众号 程序猿 酷壳