志在指尖
用双手敲打未来

oracle decode(oracle decode函数判断条件空)

oracledecode

decode(条件,值1,回来值1,值2,回来值2,…值n,回来值n,缺省值)
这个是decode的表达式,具体的含义解释为:
IF条件=值1THEN
RETURN(翻译值1)
ELSIF条件=值2THEN
RETURN(翻译值2)
……
ELSIF条件=值nTHEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
ENDIF
DECODE的用法
这儿首要说的就是decode的用法,在许多时候这个函数仍是很有用的。
1.翻译值
数据截图:
需求:查询出的数据,1表明男生,2表明女生
selectt.id,
t.name,
t.age,
decode(t.sex,’1′,’男生’,’2′,’女生’,’其他’)assex
fromSTUDENT2t
成果:
2.decode比较大小
说明:sign(value)函数会根据value的值为0,正数,负数,别离回来0,1,-1
数据:
需求:年龄在20以上的显现20以上,20以下的显现20以下,20的显现正好20
selectt.id,
t.name,
t.age,
decode(sign(t.age-20),
1,
’20以上’,
-1,
’20以下’,
0,
‘正好20’,
‘不知道’)assex
fromSTUDENT2t
成果:
3.decode分段
数据暂无
需求:薪酬大于5000为高薪,薪酬介于3000到5000为中等,薪酬小于3000为底薪
selectname,
sal,
decode(sign(sal-5000),
1,
‘高薪’,
0,
‘高薪’,
-1,
decode(sign(sal-3000),1,’中等’,0,’中等’,-1,’低薪’))assalname
fromperson;
成果暂无
4.搜索字符串
数据:
需求:找到含有三的名字
selectt.id,
decode(instr(t.name,’三’),0,’名字不含有三’,’名字含有三’)asname,
t.age,
t.sex
fromSTUDENT2t
成果:
5.判断是否为空
数据:
需求:性别为空显现“暂无数据”,不为空原样输出
selectt.id,
t.name,
t.age,
decode(t.sex,NULL,’暂无数据’,t.sex)assex
fromSTUDENT2t
成果:
总结:decode在书写sql的时候仍是挺有用的,常用的应该是1和5了吧sql

oracledecode函数判断条件空

用处
此函数所属的函数组为EncodingandDecodingFunctions,同组函数如下:
DECODE
DUMP
ORA_HASH
VSIZE
其它函数用的较少,以下首要讨论DECODE函数。
DECODE函数是干嘛的呢?如其名字,解码!谍战剧看过吧,一个奸细一个密码本,根据密文解出明文,这个DECODE是密码本吗,不是,它是奸细,这个奸细能把一个输入值解析成输入值所代表的其它值!咱们来看看它的界说与运用方法。
来自官方文档
文字描述为
DECODE(expr,search,result[,search,result]…[,default])
从上面的官方文档给出的界说能够看出:
1)expr表达式为必须部分,须为变量定值或表达式,不能为条件句子,且expr不该该为杂乱的数据类型,应为数字、字符类型等简略类型;
2)查找匹配项最少要有一项,且查找项(search)为固定值;
3)如果有重复查找值,则靠前直接返回,后续的重复值无效;
4)default为无法找到查找匹配值的默认值,为可选部分;
5)各个匹配项的返回值和默认(default)返回值(result)类型须相同。
举个栗子
withXSas(select1XH,’张山’XM,’31’BJfromdualunionselect2XH,’李斯’XM,’31’BJfromdualunionselect3XH,’王武’XM,’32’BJfromdualunionselect4XH,’放牛娃’XM,”BJfromdual)selectxh,xm,decode(BJ,’31’,’三年一班’,’32’,’三年二班’,’无班级信息’)BJXXfromXS
本例中运用with创建模仿表,表中BJ是代码,不方便阅览,所以运用decode进行解码转义成可阅览信息,结果如下:
此例仅为操练小例,下面看一个代码片段
selectksh,xm,–语文max(decode(kmdm,’101′,kmdm,’109′,kmdm,’117′,kmdm))km1dm,max(decode(kmdm,’101′,kmmc,’109′,kmmc,’117′,kmmc))km1mc,max(decode(kmdm,’101′,zf,’109′,zf,’117′,zf))km1cj,–数学max(decode(kmdm,’202′,kmdm,’211′,kmdm,’219′,kmdm))km2dm,max(decode(kmdm,’202′,kmmc,’211′,kmmc,’219′,kmmc))km2mc,max(decode(kmdm,’202′,zf,’211′,zf,’219′,zf))km2cj,–外语max(decode(kmdm,’303′,kmdm,’304′,kmdm,’305′,kmdm))km3dm,max(decode(kmdm,’303′,kmmc,’304′,kmmc,’305′,kmmc))km3mc,max(decode(kmdm,’303′,zf,’304′,zf,’305′,zf))km3cjfromall_zfgroupbyksh,xmorderbyksh;
此例中all_zf中每位学生单科成绩作为一个记录行寄存,最终的成绩表要求每名学生只保存一行数据,这就需求进行行列转换。首要外层运用考号ksh,xm进行分组,需求在一列显示的科目运用DECODE在一起解码组成新列。比如中语文、数学、外语都有多种状况,比方外语包括英语、日语、俄语等状况,所以需求将此类的科目组合成外语类的列,km3dm,km3mc,km3cj。
再举个排序的比如,还是操练小例中的故事,领导便是想把三年二班的同学排前面怎么办呢?
withXSas(select1XH,’张山’XM,’31’BJfromdualunionselect2XH,’李斯’XM,’31’BJfromdualunionselect3XH,’王武’XM,’32’BJfromdualunionselect4XH,’赵榴’XM,’33’BJfromdualunionselect5XH,’放牛娃’XM,”BJfromdual)selectxh,xm,decode(BJ,’31’,’三年一班’,’32’,’三年二班’,’33’,’三年三班’,’无班级信息’)BJXXfromXSorderbydecode(bj,’32’,1,’31’,2,’33’,3,4);
注意看排序部分,将班级编号重新解码进行排序,这种操作能够满意特别需求。不是领导的要求反常,是实际国际太杂乱,熟练掌握SQL适应所需。
综上便是DECODE的函数介绍与运用。这个函数的用处广泛,尤其是和分组查询进行组合运用,会发挥巨大作用。DECODE函数和CASE表达式简略模式在功能上有相同之处,不过DECODE写法更简略,在多处能够替代CASE表达式,使编码简练。

未经允许不得转载:IT技术网站 » oracle decode(oracle decode函数判断条件空)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载