sql decode函数

目前只有oracle支持decode函数,他可以用来优化流程控制语句,来替代用if-then-else或 case when then else end之类繁杂的流程控制语句。

函数语法

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)

函数含义

IF条件=值1THEN
RETURN(返回值1)
ELSIF条件=值2THEN
RETURN(返回值2)

ELSIF条件=值nTHEN
RETURN(返回值n)
ELSE
RETURN(缺省值)
ENDIF
decode(X,A,B,C,D,E)
这个函数运行的结果是,当X = A,函数返回B;当X != A 且 X = C,函数返回D;当X != A 且 X != C,函数返回E。 其中,X、A、B、C、D、E都可以是表达式,这个函数使得某些sql语句简单了许多。

举例

比如说:现在存在一个用户表users, 表结构为 id varchar2(50)(用户编号)、name varchar2(100)(用户姓名)、sex varchar2(1)(用户性别)age number(年龄),dept varchar2(10),sex存储的值为0和1,男为1,0为女。

decode函数作用
  • 翻译值
    查出用户信息,性别显示男女 。此时 sql如下:

case when :
select id,name, case sex when '0' then '女' when '1' then '男' else '中性' end as sex from users
decode :
select id,name,decode(sex,'0','女','1','男','中性') as sex from users
如果要进行复杂的流程控制,decode的优势就可以很明白的看出来了,简化了流程控制的sql语句

  • decode比较大小
    在用户表想要查出用户的年龄,超过18岁的输出成年,否则输出未成年

select id,name, decode( sign(age-18),'1','成年','-1','未成年','成年' ) as age from users
sign是符号函数,如果里面的值是整数就返回1,是负数就返回-1,是0就返回0

  • decode分段
    用户表查出用户信息,年龄进行分段,30以下为年轻人,30到60为中年人,60以上为老年人

select id,name decode(sign(age-60),1,'老年人',0,'老年人',-1,decode(sign(sex-30),1,'中年人',0,'中年人',-1,'年轻人') ) as age from users deocde可以嵌套使用,对数据进行分段处理,需要注意的是条件判断与case when相同,如果进入了第一个条件,就不会再进入后面的条件了,这个与 if else if 相同

  • decode搜索字符串
    查找用户姓名中包含有“刘”的人

select id,decode(instr(name,'刘'),0,'姓名中没有刘','姓名中有刘') from users

  • decode 判断是否有null字段
    查看用户性别,为空显示’未知‘

select id,name,decode(sex,null,'未知',0,'女',1,'男') from users

  • decode 和count组合统计分类
  • 要查看不同部门的人数,dept字段现在有 a,b,c,d 四个部门,而a、b是属于一个一部部门,c、d是属于二部部门,现在要统计一部和二部的人数,

select decode(dept,'a','一部','b','一部',c,'二部',d,'二部') as dept , count(1) from users groub by decode(dept,'a','一部','b','一部',c,'二部',d,'二部')
先把abcd 翻译成 一部、二部,然后根据一部二部进行分组计数,这样就可以统计出一部和二部的数量了

  • decode 实现行转列
    假设存在现有表数据表名 student
name subject grade
a chinese 80
a math 90
b math 95
b chinese 100

要实现查询每个人的语文数学成绩

select name,sum(decode(subject,'chinese',grade,0)) as chinese,sum(decode(subject,'math',grade,0)) as math from student group by name

这样查出的数据结果为

name chinese math
a 80 90
b 100 95

sql语句利用了decode函数判断科目为该科目的成绩为该科成绩,其余为0,这样数据就会在decode下变成

name chinese math
a 80 0
a 0 90
b 0 95
b 100

这样同一个人 sum求和只会求出一科的成绩,就实现了行转列.

2020-11-10 oracle 数据库sql 之decode函数相关推荐

  1. oracle sql文字列函数,Oracle 数据库SQL中 decode()函数简介

    decode()函数简介: 主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明): 使用方法: Select decode(columnname,值1,翻译值1,值2,翻译值2,.. ...

  2. oracle v¥bh,ORACLE数据库sql语言、函数及常用命令

    file=c:\database\ydxt200108170926.dmp log=c:\database\ydxt200108170926.log fromuser=cur touser=cur1 ...

  3. 19.Oracle数据库SQL开发之 笛卡尔积

    19.Oracle数据库SQL开发之 笛卡尔积 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/49107213 如果在多表查询中 ...

  4. oracle 窗口函数查询条件,62.Oracle数据库SQL开发之 高级查询——使用分析函数之窗口函数...

    62.Oracle数据库SQL开发之 高级查询--使用分析函数之窗口函数 窗口函数可以计算一定的记录范围内.一定值域内.或者一段时间内的累积和以及移动平均值.查询返回一组记录,称为结果集.窗口这个术语 ...

  5. 116.Oracle数据库SQL开发之 PLSQL编程——游标

    116.Oracle数据库SQL开发之 PLSQL编程--游标 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50086931 ...

  6. oracle数据库sql优化

    oracle数据库sql优化 1.select子句中不要使用 * ,这会使数据字典消耗一些资源. 2.尽量定义表的别名使用别名前缀于列做关联,减小解析时间,避免错误. 3. ⽤>=替代> ...

  7. oracle数据库sql培训,Oracle数据库SQL语言实战培训教程(全面、详细、案例、精讲)套餐...

    风哥oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 套餐介绍: 风哥Oracle数据库SQL语言实战培训教程(案例.精讲)套餐,DBA必备技能. 内容: SQL语言基础入 ...

  8. 资源放送丨《Oracle数据库SQL执行计划的取得和解析》PPT视频

    前段时间,墨天轮邀请Oracle优化方面的资深专家 陈晓辉 老师分享了<Oracle数据库SQL执行计划的取得和解析>,在这里我们共享一下PPT和视频,供大家参考学习. Oracle优化资 ...

  9. 29 Oracle数据库SQL开发之 SQLPlus使用——创建简单报表

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 29.O ...

  10. 2.Oracle数据库SQL开发之 SQL DEVELOPER使用

    2.Oracle数据库SQL开发之 SQL DEVELOPER使用 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/4908221 ...

最新文章

  1. libcurl多线程下载开发过程中需要注意的一个问题
  2. PHP安装swoole扩展
  3. 2018年12月份学习总结,PMP学习总结
  4. Ubuntu ls可以查看到文件,图形界面却看不到
  5. rabbitmq安装与配置(windows)亲测有效!!!
  6. html元素data属性设置变量,HTML5 自定义属性 data-* 和 jQuery.data 详解
  7. 一般最小二乘法 c语言,最小二乘法C语言的实现(7页)-原创力文档
  8. ubuntu 安装deb程序文件失败的解决方法
  9. mysql增删改查扩展_MySQL(增删改查补充)
  10. android图片垂直居中,img图片在div里垂直居中的最佳解决方案
  11. 清理迅雷系列软件数据记录【破坏性】
  12. 校内胡策 T9270 mjt树
  13. HTML+CSS+JavaScript实现旅游网站官网
  14. 二极管压降电压一览表
  15. [幽默网文]2009高考作文语录
  16. 软件测试的新技术和方法
  17. ios12怎么滑屏解锁_对比苹果iOS12和安卓9.0,相互学习了哪些功能
  18. Android获取局域网所有设备的ip地址
  19. Delphi 2010正式版下载(RAD Studio 2010下载)
  20. golang 升级到新版本_golang升级

热门文章

  1. 微信小程序的图片上传及图片预览功能
  2. react 翻书效果_React实现翻页功能
  3. 2022 最新 Kafka 面试题
  4. 怎么关闭计算机的端口服务,怎么关闭和打开电脑的端口?
  5. HCNA培训常见问题001-HCNA AI学习什么内容?
  6. Java性能调优实战-怎样才能做好性能调优?
  7. Linux基础知识 | vi编辑器
  8. 【实用技巧】虚拟机一键更换IP,更换网络不再是问题
  9. cad中tk什么意思_cad绘图tk命令技巧
  10. java基本语法(史上最全)