一、NULLIF函数到底是什么?
简单来说,NULLIF就是个”相等就变空”的SQL小能手。它接收两个参数,比如NULLIF(A,B),如果A和B的值相等,它就返回NULL;要是不相等,就原样返回A的值。这听起来平平无奇,但在处理特殊数据场景时简直能救命!比如把默认的无效数值转成空值,或者防止计算公式报错。

二、基础语法五分钟上手
它的语法简单到笑:NULLIF(expression1, expression2)。两个参数可以是字段、固定值或复杂表达式。举个栗子:
SELECT NULLIF(订单金额, 0) FROM 销售表; –
把0元订单转成NULL
注意两个参数类型必须一致,否则数据库会直接甩你一脸错误提示。
三、除零错误克星
做数据分析最怕遇到除零错误!比如算平均单价时:
SELECT 总金额 / 销量 AS 单价 FROM 订单表;
万一销量是0,整个查询直接崩掉。用NULLIF轻松化解:
SELECT 总金额 / NULLIF(销量, 0) AS 单价 FROM 订单表;
当销量为0时,NULLIF(销量,0)返回NULL,除法结果自然变NULL,查询稳如泰山。
四、数据清洗神器
处理脏数据时NULLIF简直开挂:
- 替换占位符:把999这种无效标识转NULL →
NULLIF(年龄, 999) - 清理空白值:空字符串转NULL →
NULLIF(TRIM(姓名), '') - 屏蔽测试数据:过滤掉”-1″这种模拟值 →
NULLIF(用户ID, -1)
比写复杂CASE语句快三倍不止!
五、与IFNULL的终级对比
| 函数 | 行为 | 典型场景 |
|---|---|---|
| NULLIF(A,B) | A=B返NULL A≠B返A |
特定值转空 |
| IFNULL(A,B) | A非空返A A空返B |
空值替换默认值 |
举个实际例子对比:
-
把0转成NULL (NULLIF专长)
SELECT NULLIF(库存量, 0)
把NULL转成0 (IFNULL专长)
SELECT IFNULL(库存量, 0)
它俩就像扳手和钳子——功能完全不同但都是工具箱必备。
六、高级组合技
配合其他函数效果更炸裂:
- COALESCE黄金搭档:
COALESCE( NULLIF(电话,'未知'), '暂无')
先把”未知”转NULL,再用COALESCE替换成”暂无” - CASE简化术:
原本要写:
CASE WHEN 状态=99 THEN NULL ELSE 状态 END
简化为:
NULLIF(状态, 99)
七、避坑指南
使用时注意三个雷区:
- 类型必须匹配:
NULLIF('5', 5)在强类型库会报错 - 慎用NULL参与比较:
NULLIF(A, NULL)永远返回NULL - 索引失效风险:WHERE条件中过度使用可能导致索引失效
建议在ETL清洗阶段使用,避免在实时查询中嵌套多层。
八、实战案例演示
看个电商场景综合应用:
-
步骤1:清洗折扣率异常值
UPDATE 商品表
SET 折扣率 = NULLIF(折扣率, 999)
步骤2:计算折后价时防除零
SELECT
原价 / NULLIF(折扣率, 0) AS 实付价,
IFNULL(商品描述, '暂无说明') AS 描述
FROM 商品表
WHERE NULLIF(库存, -1) IS NOT NULL; -
过滤测试数据
三步搞定数据清洗、计算保护和测试数据过滤!
内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。
本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/150194.html