• 售前

  • 售后

热门帖子
入门百科

oracle中的decode的利用先容

[复制链接]
123457500 显示全部楼层 发表于 2021-10-26 14:23:18 |阅读模式 打印 上一主题 下一主题
寄义表明:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的寄义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF
decode(字段或字段的运算,值1,值2,值3)
       这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
固然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多
使用方法:
1、比力巨细
select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
sign()函数根据某个值是0、正数照旧负数,分别返回0、1、-1
例如:
变量1=10,变量2=20
则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
2、此函数用在SQL语句中,功能先容如下:
Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次举行比力。假如base_exp和 第i 个compare项匹配,就返回第i 个对应的value 。假如base_exp与任何的compare值都不匹配,则返回default。每个compare值顺次求值,假如发现一个匹配,则剩下的compare值(假如另有的话)就都不再求值。一个为NULL的base_exp被以为和NULL compare值等价。假如必要的话,每一个compare值都被转换成和第一个compare 值相同的数据类型,这个数据类型也是返回值的类型。
Decode函数在现实开发中非常的有效
结合Lpad函数,怎样使主键的值主动加1并在前面补0
select LPAD(decode(count(纪录编号),0,1,max(to_number(纪录编号)+1)),14,'0') 纪录编号 from tetdmis
eg:
select decode(dir,1,0,1) from a1_interval
dir 的值是1变为0,是0则变为1
比如我要查询某班男生和女生的数目分别是多少?
通常我们这么写:
select count(*) from 表 where 性别 = 男;
select count(*) from 表 where 性别 = 女;
要想表现到一起还要union一下,太麻烦了
用decode呢,只必要一句话
select decode(性别,男,1,0),decode(性别,女,1,0) from 表
3,order by对字符列举行特定的排序
各人还可以在Order by中使用Decode。
例:表table_subject,有subject_name列。要求按照:语、数、外的序次举行排序。这时,就可以非常轻松的使用Decode完成要求了。
select * from table_subject order by decode(subject_name, '语文', 1, '数学', 2, , '外语',3)

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作