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

[Oracle] DECODE()函数

DECODE() 是 Oracle 的一个非常强大且常用的条件表达式函数,它实现了类似于 if-then-else 或 case-when 的逻辑,但语法更为简洁

语法格式

DECODE(expression, search1, result1, [search2, result2, ...], [default])

参数说明
expression:要比较的值或表达式
search1, search2,...:要与 expression 比较的值
result1, result2,...:当 expression 与对应的 search 值匹配时返回的结果
default:可选参数,当没有匹配项时返回的默认值,如果省略且没有匹配项,则返回 NULL

DECODE()函数将 expression 依次与每个 search 值进行比较:
① 如果 expression 等于 search1,则返回 result1
② 如果不等于,则继续比较 search2,如果匹配则返回 result2
③ 依此类推,直到找到匹配项
④ 如果没有匹配项且提供了 default 参数,则返回 default 值
⑤ 如果没有匹配项且未提供 default 参数,则返回 NULL

示例

-- 简单的值比较
SELECT DECODE(1, 1, 'One', 2, 'Two', 'Other') FROM dual;  -- 'One'
SELECT DECODE(3, 1, 'One', 2, 'Two', 'Other') FROM dual;  -- 'Other'SELECT DECODE(1+2, 3, 'A', 'B') from dual;  -- 'A'
SELECT DECODE(1+2, 4, 'A', 'B') from dual;  -- 'B'-- 转换描述
SELECT order_id,DECODE(status, 'P', 'Pending','S', 'Shipped','D', 'Delivered','Unknown Status') AS status_desc
FROM orders;-- 数值范围判断
SELECT employee_name,salary,DECODE(SIGN(salary - 5000),-1, 'Low',0, 'Medium',1, 'High') AS salary_level
FROM employees;-- 多条件组合
SELECT product_id,DECODE(category, 'A', price*0.9,'B', price*0.8,'C', price*0.7,price) AS discounted_price
FROM products;-- 与聚合函数结合使用
SELECT department_id,COUNT(*) AS total,COUNT(DECODE(gender, 'M', 1, NULL)) AS male_count,COUNT(DECODE(gender, 'F', 1, NULL)) AS female_count
FROM employees
GROUP BY department_id;-- 嵌套DECODE()函数
SELECT employee_name,DECODE(DECODE(department, 'IT', 1, 'HR', 2, 0),1, 'Technical',2, 'Administrative','Other') AS employee_type
FROM employees;

提示Tips

① DECODE()函数对NULL值的处理:DECODE()认为 NULL 等于 NULL

SELECT DECODE(NULL, NULL, 'Equal', 'Not Equal') FROM dual;  -- 'Equal'

② 对于简单的条件判断,DECODE()通常比 CASE 表达式更高效,但对于复杂的多条件逻辑,CASE 表达式可能更清晰易读

③ DECODE()函数会尝试将所有参数转换为第一个 result 参数的数据类型

所有 result 值应最好保持相同或兼容的数据类型

http://www.xdnf.cn/news/1256041.html

相关文章:

  • oracle 11G安装大概率遇到问题
  • Java面试宝典:JVM的垃圾收集算法
  • c++之 栈浅析
  • 如何提高云手机中数据信息的安全性?
  • 数字取证:可以恢复手机上被覆盖的数据吗?
  • PostgreSQL 数据库 设置90天密码过期时间的完整方案
  • 数据结构(五):顺序循环队列与哈希表
  • 僵尸进程问题排查
  • 安卓10.0系统修改定制化____修改系统固件 实现刷写完成 开机默认关闭桌面搜索框
  • 【网络编程】IO多路转接——select
  • 2025年我国半导体材料产业链全景分析
  • MySQL聚簇索引与非聚簇索引详解
  • uni-app X能成为下一个Flutter吗?
  • Linux基础测试
  • .NET 10 新增功能系列文章5——C# 14 中的新增功能
  • 人工智能的20大应用
  • 基于django的非物质文化遗产可视化网站设计与实现
  • [LVGL] 布局系统 lv_flex, lv_grid | 输入设备 lv_indev | union
  • 云原生安全挑战与治理策略:从架构思维到落地实践
  • 从密钥生成到功能限制:Electron 中 secure-electron-license-keys 的完整集成方案
  • Python生产环境部署指南:专业级应用启动方案
  • 2025最新国内服务器可用docker源仓库地址大全(2025年8月更新) · DockerHub镜像加速全面指南
  • 音视频时间戳获取与同步原理详解
  • 容器之王--部署Docker私有仓库harbor母盘步骤演练
  • 合约收款方式,转账与问题安全
  • ansible-playbook之获取服务器IP存储到本地文件
  • 一文读懂 C# 中的 Bitmap
  • GPT-5 将在周五凌晨1点正式发布,王炸模型将免费使用??
  • 【R语言】 高清美观的 MaxEnt 刀切图(Jackknife)绘制——提升论文质量
  • 从Text2SQL到Text2Metrics:衡石指标管理技术跃迁