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

SQL decode() 函数

1. 基本语法

DECODE(表达式, 值1, 结果1, 值2, 结果2, ..., 默认值)
  • 工作原理: 比较第一个参数(表达式)与后续的 "值 N":
    • 如果表达式等于值1,返回结果1
    • 如果表达式等于值2,返回结果2
    • ... 以此类推
    • 如果都不匹配,返回最后的默认值(如果省略默认值,则返回NULL

假设有一张 student 表,包含 idnamescore 字段,现在需要根据分数判断等级:

idnamescore
1张三85
2李四62
3王五93
4赵六58

SQL 示例:

SELECT name,score,DECODE(FLOOR(score/10),  -- 表达式:分数除以10取整10, 'A+',         -- 100分 → A+9, 'A',           -- 90-99分 → A8, 'B',           -- 80-89分 → B7, 'C',           -- 70-79分 → C6, 'D',           -- 60-69分 → D'不及格'          -- 其他分数 → 不及格(默认值)) AS grade
FROM student;

结果:

name  | score | grade
------|-------|-------
张三  | 85    | B
李四  | 62    | D
王五  | 93    | A
赵六  | 58    | 不及格

2. 配合聚合函数使用

SELECT DECODE(gender,  -- 按性别分组'男', '男生', '女', '女生', '未知') AS 性别分组,COUNT(*) AS 人数,AVG(score) AS 平均分数
FROM student
GROUP BY DECODE(gender, '男', '男生', '女', '女生', '未知');

3. DECODE()注意事项

DECODE() 和 CASE WHEN 都能实现条件判断,但有以下区别:

特性DECODE()CASE WHEN
语法简洁性更简洁,适合简单判断更灵活,适合复杂逻辑
支持的数据类型主要支持等值判断支持各种比较(>、<、IN 等)
数据库兼容性主要支持 Oracle,其他库有限几乎所有数据库都支持

例如,CASE WHEN 可以实现范围判断,而 DECODE() 不能:

-- CASE WHEN 支持范围判断
CASE WHEN score >= 90 THEN '优秀'WHEN score >= 60 THEN '及格'ELSE '不及格'
END

注意事项

  1. 数据库支持DECODE() 是 Oracle 的专有函数,MySQL、SQL Server 等数据库不支持,这些数据库建议使用 CASE WHEN

  2. 等值判断限制DECODE() 只能做等值比较,无法直接实现大于、小于等范围判断。

  3. 默认值:如果省略默认值,当所有条件不匹配时返回 NULL

如果需要编写跨数据库兼容的代码,优先使用 CASE WHEN;如果是 Oracle 环境且逻辑简单,DECODE() 可以让代码更简洁。

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

相关文章:

  • Python爬虫实战:研究Axes Grid模块,构建旅游平台酒店数据采集和分析系统
  • VNC连接服务器实现远程桌面-针对官方给的链接已经失效问题
  • Linux 综合练习
  • LTE CA和NR CA的区别和联系
  • 第七章 Cesium 3D 粒子烟花效果案例解析:从原理到完整代码
  • CSS Position 属性
  • Pspice仿真电路:(三十六)变压器仿真
  • 本科论文抽检档案整理:Python批量文件查找、打包、改名
  • 【uniapp】打包为h5在保留头部标题的同时配置网站标题不跟随页面路由更新
  • CVPR 2025|无类别词汇的视觉-语言模型少样本学习
  • RikkaHub:安卓原生AI聊天新体验
  • 【设计模式】UML 基础教程总结(软件设计师考试重点)
  • 十一、标准化和软件知识产权基础知识
  • 认识 Flutter
  • 告别 OpenAI SDK:如何使用 Python requests 库调用大模型 API(例如百度的ernie-4.5-turbo)
  • 【Qt开发】按钮类控件(三)-> QCheckBox
  • 【完整源码+数据集+部署教程】手袋类型检测系统源码和数据集:改进yolo11-AFPN-P345
  • 前端开发,同源策略
  • 【Linux】Linux进程状态和僵尸进程:一篇看懂“进程在忙啥”
  • 基于OpenGL封装摄像机类:视图矩阵与透视矩阵的实现
  • 如何下载B站视频,去水印,翻译字幕
  • .Net程序员就业现状以及学习路线图(四)
  • 创建线程有哪几种方式
  • 【数字孪生核心技术】数字孪生有哪些核心技术?
  • Kubernetes(四):Service
  • HyperWorks许可服务器设置
  • 企业微信AI怎么用?食品集团靠它砍掉50%低效操作,答案就是选对企业微信服务商
  • ZeroMQ 编译 项目使用流程文档
  • Android 生命周期函数调用原理
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(3)