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

相关文章:

  • DBeaver 25.1.0 转储数据库失败解决方案(适配最新版界面)
  • [Oracle] GREATEST()函数
  • 数据库入门:从零开始构建你的第一个数据库
  • 一个基于固定 IP地址查询天气的 C 语言程序,通过调用第三方天气 API:
  • Oracle 关闭 impdp任务
  • Oracle 12c + Pl/Sql windows系统下表空间创建、迁移,dmp备份导入,数据库字符集更改
  • 图论(1):图数据结构
  • 攻防世界WEB(新手模式)2-2-upload1
  • 【YOLO学习笔记】YOLOv8详解解读
  • 工业相机使用 YOLOv8深度学习模型 及 OpenCV 实现目标检测简单介绍
  • Moses工具的配置和小语种平行语料训练SMT完整实现
  • 商城小程序怎么做?如何开发母婴用品商城小程序?
  • 前端三大核心要素以及前后端通讯
  • mysql_mcp_server_pro源码部署及启动报错新手指南:让智能体长出手来直接获取到最底层的数据
  • Linux ISCSI服务配置
  • 聚集索引VS非聚集索引:核心差异详解
  • 将Excel数据导入SQL Server数据库,并更新源表数据
  • 安卓Handler和Looper的学习记录
  • ArkTS: McPointChart
  • Debian系统 为账号添加sudo权限
  • 远程制作《最后生还者》中的Xsens动作捕捉技术
  • Maven分模块开发实战指南
  • Windows下安装SageAttention
  • 【CodeButty + 自制MCP】给AI装上翅膀,快速绘制思维导图
  • javaweb开发之会话_过滤器_监听器
  • EtherCAT时钟DC同步的三种模式
  • 项目构想|文生图小程序
  • OpenCV 入门教程:开启计算机视觉之旅
  • C语言memcpy函数详解:高效内存复制的实用工具
  • 【代码随想录day 14】 力扣 226.反转二叉树