[Oracle] NVL()函数

NVL() 是 Oracle 中处理 NULL 值的函数,它用于将 NULL 值替换为指定的默认值

NVL()函数的主要功能是检查第一个表达式是否为 NULL,如果为 NULL,则返回第二个参数(默认值),如果不为 NULL,则返回第一个表达式的值

语法格式

sql 复制代码
NVL(expression, default_value)

参数说明

expression:要检查的表达式(可以是列、计算值或函数结果)

default_value:当 expression 为 NULL 时要返回的值(必须与 expression 数据类型兼容)

示例

sql 复制代码
-- 处理数值型NULL值
SELECT NVL(salary, 0) FROM employees;  -- 如果salary为NULL,返回0;否则返回salary值

-- 处理字符型NULL值
SELECT NVL(department_name, '未分配部门') FROM departments;  -- 如果department_name为NULL,返回'未分配部门'

-- 处理日期型NULL值
SELECT NVL(end_date, TO_DATE('9999-12-31', 'YYYY-MM-DD')) FROM job_history;  -- 如果end_date为NULL,返回一个未来日期

-- 计算员工总薪资(处理可能为NULL的奖金)
SELECT employee_id, 
       salary + (salary * NVL(commission_pct, 0)) AS total_compensation
FROM employees;

-- 生成销售报表,替换NULL值为可读文本
SELECT product_id,
       product_name,
       NVL(TO_CHAR(standard_cost), '成本未设定') AS cost,
       NVL(TO_CHAR(list_price), '价格未设定') AS price
FROM products;
sql 复制代码
-- 错误示例(类型不匹配)
SELECT NVL(hire_date, '无日期') FROM employees;  -- 错误:字符与日期不匹配

-- 正确做法
SELECT NVL(TO_CHAR(hire_date), '无日期') FROM employees;

提示Tips:默认值必须与表达式数据类型兼容,保持一致性

NVL()函数与聚合函数结合使用

sql 复制代码
-- 计算部门平均薪资(处理部门无员工的情况)
SELECT d.department_id,
       d.department_name,
       NVL(AVG(e.salary), 0) AS avg_salary
FROM departments d
LEFT JOIN employees e 
ON d.department_id = e.department_id
GROUP BY d.department_id, d.department_name;

NVL()函数与UPDATE语句结合使用

sql 复制代码
-- 将NULL的库存量更新为0
UPDATE inventory
SET stock_quantity = NVL(stock_quantity, 0)
WHERE stock_quantity IS NULL;

NVL()函数与CASE表达式结合使用

sql 复制代码
SELECT employee_id,
       CASE 
         WHEN NVL(commission_pct, 0) > 0.2 THEN '高佣金'
         WHEN NVL(commission_pct, 0) > 0.1 THEN '中等佣金'
         ELSE '低佣金或无佣金'
       END AS commission_level
FROM employees;

补充扩展知识:NVL2()函数

sql 复制代码
NVL2(expression1, expression2, expression3)

若expression1值不为 NULL,则该函数返回expression2的值;

若expression1值为 NULL,则该函数返回expression3的值;

若expression1、expression2、expression3的值均为 NULL,则该函数返回 NULL

相关推荐
01_ice1 分钟前
MySQL基本查询1
数据库·mysql
腾科IT教育26 分钟前
Oracle OCP/OCM认证含金量实测2026版
数据库·oracle·ocp·ocm·甲骨文
不可求~9 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
Lumistory9 小时前
城市建筑照明的落地与长效运营观察
大数据·数据库·中间件·光照贴图
围炉聊科技12 小时前
长期免费的数据库方案——零成本基建系列
数据库
AC赳赳老秦12 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
梁辰兴14 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦14 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦15 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech15 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类