当前位置: 首页 > 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.lryc.cn/news/612095.html

相关文章:

  • Python:文件管理
  • 玳瑁的嵌入式日记D13-0806(C语言)
  • 【运维进阶】DHCP服务配置和DNS域名解析
  • TypeScript ActionScript
  • 浅谈RNN被Transformer 取代的必然性
  • Kotlin Native调用C curl
  • Uniapp生物识别(SOTER)
  • 【第5话:相机模型1】针孔相机、鱼眼相机模型的介绍及其在自动驾驶中的作用及使用方法
  • 第二十六天(数据结构:树(补充版程序请看下一篇))
  • 数字图像处理(冈萨雷斯)第三版:第四章——空间滤波与频域滤波(平滑与锐化)——主要内容和重点
  • 【PHP 抽象类完全指南(含 PHP 8.4 新特性)】
  • 02.【数据结构-C语言】顺序表(线性表概念、顺序表实现:增删查、前向声明、顺序表实现通讯录项目:增删改查、通讯录数据导入及保存到本地文件)
  • Linux操作系统启动项相关研究与总结
  • Redis面试精讲 Day 12:Redis Sentinel哨兵机制详解
  • 深度学习(pytorch版)前言:环境安装和书籍框架介绍
  • 单变量单步时序预测:CNN-GRU卷积神经网络结合门控循环单元
  • Linux系统编程——环境变量、命令行参数
  • mysql8.0主从节点克隆
  • Numpy科学计算与数据分析:Numpy入门之多平台安装与基础环境配置
  • 用NAS如何远程访问:详细教程与实用技巧
  • 强强联合:OpenAI正式登陆AWS!
  • 【motion】标签体系设计与检索 1:HumanML3D 和 KIT Motion-Language(KITML)
  • 《Vue 3与Element Plus构建多语后台的深层架构》
  • 导入Excel打印
  • GEAR:一种高效的 KV Cache 压缩方法,用于几乎无损的大语言模型生成式推理
  • 云手机对于网络游戏的作用
  • linux下的串口通信原理及编程实例
  • 【完整源码+数据集+部署教程】耳镜耳部疾病分类系统源码和数据集:改进yolo11-HSFPN
  • Centos 安装 redis
  • 理解生成统一模型技术调研报告