当前位置: 首页 > news >正文

[Oracle] NVL()函数

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

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

语法格式

NVL(expression, default_value)

参数说明
expression:要检查的表达式(可以是列、计算值或函数结果)
default_value:当 expression 为 NULL 时要返回的值(必须与 expression 数据类型兼容)

示例

-- 处理数值型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;
-- 错误示例(类型不匹配)
SELECT NVL(hire_date, '无日期') FROM employees;  -- 错误:字符与日期不匹配-- 正确做法
SELECT NVL(TO_CHAR(hire_date), '无日期') FROM employees;

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

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

-- 计算部门平均薪资(处理部门无员工的情况)
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语句结合使用

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

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

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()函数

NVL2(expression1, expression2, expression3)

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

http://www.dtcms.com/a/318013.html

相关文章:

  • 【概念学习】深度学习有何不同
  • 220降5V,30mA电流,墙壁开关和调光器应用场景WD5201
  • 【秋招笔试】2025.08.02-OPPO秋招第二套-第一题
  • Win10还未停更,对标iPad的教育版Win11也宣布停更了
  • Python爬虫 urllib 模块详细教程:零基础小白的入门指南
  • Pytest项目_day05(requests加入headers)
  • 项目中MySQL遇到的索引失效的问题
  • Conditional Modeling Based Automatic Video Summarization
  • Ubuntu20.04 离线安装 FFmpeg 静态编译包
  • 深度学习G5周:Pix2Pix理论与实战
  • Transformer模型及深度学习技术应用
  • 什么是 Kafka 中的消息?它由哪些部分组成
  • 高频面试点:深入理解 TCP 三次握手与四次挥手
  • mysql优化策略
  • qt qml实现电话簿 通讯录
  • [FBCTF2019]RCEService
  • apache-tomcat-11.0.9安装及环境变量配置
  • 认识MCP
  • java中普通流stream与并行流parallelStream的比较分析
  • Javascript/ES6+/Typescript重点内容篇——手撕(待总结)
  • 如何定位一个高并发场景下API响应时间从200ms突增到2s的问题
  • 数据结构---二级指针(应用场景)、内核链表、栈(系统栈、实现方式)、队列(实现方式、应用)
  • SQL168 统计作答次数
  • 简单介绍cgroups以及在K8s中的应用
  • DM数据库的安全版本SYSDBA无法修改其他用户密码?
  • 2025年COR SCI2区,船载AUV协同调度优化+海上风电机组水下检测,深度解析+性能实测
  • GPT-oss开源:200万小时淬炼AI Agent专属商用引擎
  • Vi与Vim的主要区别总结
  • Linux systemd 服务管理与 Firewall 防火墙配置
  • 【论文分析】【Agent】SEW: Self-Evolving Agentic Workflows for Automated Code Generatio