Oracle解码()功能使用技能共享
解码功能为oracle。它是强大的功能之一。目前,Oracle SQL提供了此功能。其他数据库厂商的SQL实现还没有这个功能。解码有什么用呢
我们首先构造一个例子,假设我们想提高知行的工作人员,标准是:在20%付8000元;工资在8000元以上的15%个,通常的做法是先在记录值选择薪酬为VaR薪金的雇员薪酬领域的选择,然后流控制语句等if-then-else或选择变量工资判决案。
如果我们使用解码功能,那么我们可以省略这些流量控制语句,并直接通过SQL语句进行。如下:选择解码(符号(工资8000)),1,工资* 1.15,- 1,工资* 1.2,员工工资,不是很简洁吗
语法解码解码(价值,因此,IF1,IF2,2,3,3,…,其他),这意味着如果值是相等的人,该函数返回的结果是…,如果它不等于任何值,则返回零。乍一看,解码只能做相同的试验,但正如我们刚才看到的,我们可以通过一些函数或计算取代价值,使解码功能有大于或小于或等于功能。
解码(条件,值1,翻译值1,值2,翻译值2,值n,翻译值n,默认值)解码(字段1,值1,比较2,值2),…比较n,值n缺省值)。
这个函数的含义如下:
如果条件=值1,那么
返回(翻译值1)
elsif条件=价值2
返回(翻译值2)
…
elsif条件= n值,然后
返回(翻译值n)
其他的
返回(默认)
最后如果
使用技巧解码()函数
软件环境:
1、Windows NT4.0 + Oracle 8.0.4
2、Oracle安装路径是:C: /妇女祈祷像
使用方法:
1。比较大小
从双选择解码(符号1变量2),- 1,变量1,变量2);取一个较小的值
符号()函数返回0, 1和- 1,基于值为0,正或负。
例如:
变量1 = 10,变量2 = 20
符号(变量1变量2)返回到1,解码解码结果为变量的1,达到较小值的目的。
2、表、视图结构转换
有一个现有的销售表销售。表结构是:
月char(6)-月
卖号(10,2)每月销售金额
现有的数据是:
二十亿零一万一千
二十亿零二万一千一百
二十亿零三万一千二百
二十亿零四万一千三百
二十亿零五万一千四百
二十亿零六万一千五百
二十亿零七万一千六百
二十亿零一百零一万一千一百
二十亿零二百零二万一千二百
二十亿零三百零一万一千三百
要转换为以下结构的数据:
年份char(4)年
month1数(10,2)-- 1个月的销售金额
次数(10,2)-- 2个月的销售金额
个数(10,2)-- 3个月的销售金额
月数(10,2)-- 4个月的销售金额
month5数(10,2)-- 5个月的销售金额
2.1数(10,2)-- 6个月的销售金额
month7数(10,2)-- 7个月的销售金额
month8数(10,2)-- 8个月的销售金额
month9数(10,2)-- 9个月的销售金额
month10数(10,2)-- 10个月的销售金额
month11数(10,2)-- 11个月的销售金额
month12数(10,2)-- 12个月的销售金额
结构转换的SQL语句是:
创建或替换视图
v_sale(年,month1,次,个月,月,month5,2.1,month7,month8,month9,month10。
作为
选择
substrb(月、1),
和(解码(substrb(月、5),01,出售,0))),
和(解码(substrb(月、5),参会的,出售,0))),
和(解码(substrb(月、5),2003,出售,0))),
和(解码(substrb(月、5),2004,出售,0))),
======================================================
补充1:
有学生成绩表的学生。现在我们需要使用解码函数来实现以下功能:> 85是优秀的,> 70是好的,> 60是通过的,否则就失败了。
假设学生的数量是id,结果是分数,那么:
选择ID,解码(标志(score-85),1,0,优秀,优秀,1,
解码(标志(score-70),1,0,'好','好',1,
解码(标志(score-60),1,0,通过,通过,1,不及格))))
从学生;
======================================================
补充2:解码功能的语法结构如下:
解码(表达search_1,result_1)
解码(表达search_1,result_1,search_2,result_2)
解码(表达search_1,result_1,search_2,result_2,…,search_n,result_n)
解码(表达search_1,result_1,默认)
解码(表达search_1,result_1,search_2,result_2,默认)
解码(表达search_1,result_1,search_2,result_2,…,search_n,result_n,默认)
解码函数比较表达式和搜索词,如果匹配,返回结果;如果不匹配,则返回默认值;如果未定义默认值,则返回null值。
下面是一个简单的测试来说明解码函数的用法:
创建表的SQL >选择用户名,default_tablespace,lock_date从dba_users;
表的创建。
从T选择;
default_tablespace lock_date用户名
---------------------------------------------------------------------
系统
系统
outln系统
csmig系统
史葛系统
eygle用户
dbsnmp系统
oracle系统20-oct-04
选择8行。
已选择的用户名,解码(lock_date,null,'unlocked ','locked ')状态从T;
用户名状态
--------------------------------------
系统解锁
系统解锁
outln解锁
csmig解锁
史葛打开
eygle解锁
dbsnmp解锁
oracle的锁
选择8行。
已选择的用户名,解码(lock_date,null,'unlocked ')状态从T;
用户名状态
--------------------------------------
系统解锁
系统解锁
outln解锁
csmig解锁
史葛打开
eygle解锁
dbsnmp解锁
wmsys8行选择。