更新时间:2023-08-18 09:41:50
你们好,最近小艾特发现有诸多的小伙伴们对于decode是什么意思,decode这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 解码功能是ORACLE PL/SQL的强大功能之一。目前只有ORACLE的SQL提供了这个功能,其他数据库厂商的SQL实现都没有。
2、 解码有什么用?我们先构造一个例子。假设我们要给知行员工涨工资。标准为:工资8000元以下的,增加20%;工资8000元以上加15%,通常的做法是,
3、 Select the salary field value in the record first? From employee salary selection to var- salary,
4、 然后通过if-then-else或choose case等流控制语句判断变量var-salary。如果我们使用DECODE函数,那么我们可以省略这些流控制语句,直接通过SQL语句来完成。
5、 As follows: Choosedecode (symbol (salary-8000), 1, salary *1.15, -1, salary *1.2. Is the salary from employees simple?
6、 Syntax of translation: decoding (value, if1, then1, if2, then2, if3, then3, else), which means that if the value is equal to if1,
7、 DECODE函数的结果返回then1,否则如果它不等于任何if值。乍一看,DECODE只能做等式测试,但是正如你刚才看到的,我们用一些函数或计算来代替value。
8、 可以,你可以让DECODE函数有大于,小于,等于的功能。
9、 该功能的含义如下:
10、 如果条件=值1,则
11、 返回(翻译值1)
12、 Elsfer condition=value 2 and then
13、 返回(翻译值2)
14、 .
15、 Elsfer condition=value then
16、 返回(翻译值n)
17、 ELSE
18、 返回(默认值)
19、 END IF
20、 该功能的含义如下:
21、 如果条件=值1,则
22、 返回(翻译值1)
23、 Elsfer condition=value 2 and then
24、 RETURN(翻译值2)
25、 .
26、 ELSIF 条件=值n THEN
27、 RETURN(翻译值n)
28、 ELSE
29、 RETURN(缺省值)
30、 END IF
31、 1、比较大小
32、 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值
33、 sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
34、 例如:
35、 变量1=10,变量2=20
36、 则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。
37、 2、表、视图结构转化
38、 现有一个商品销售表sale,表结构为:
39、 month char(6) --月份
40、 sellnumber(10,2) --月销售金额
41、 现有数据为:
42、 2000011000
43、 2000021100
44、 2000031200
45、 2000041300
46、 2000051400
47、 2000061500
48、 2000071600
49、 2001011100
50、 2002021200
51、 2003011300
52、 想要转化为以下结构的数据:
53、 year char(4) --年份
54、 month1number(10,2) --1月销售金额
55、 month2number(10,2) --2月销售金额
56、 month3number(10,2) --3月销售金额
57、 month4number(10,2) --4月销售金额
58、 month5number(10,2) --5月销售金额
59、 month6number(10,2) --6月销售金额
60、 month7number(10,2) --7月销售金额
61、 month8number(10,2) --8月销售金额
62、 month9number(10,2) --9月销售金额
63、 month10number(10,2) --10月销售金额
64、 month11number(10,2) --11月销售金额
65、 month12number(10,2) --12月销售金额
66、 结构转化的SQL语句为:
67、 create or replace view
68、 v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
69、 as
70、 select
71、 substrb(month,1,4),
72、 sum(decode(substrb(month,5,2),'01',sell,0)),
73、 sum(decode(substrb(month,5,2),'02',sell,0)),
74、 sum(decode(substrb(month,5,2),'03',sell,0)),
75、 sum(decode(substrb(month,5,2),'04',sell,0)),
76、 补充1:
77、 有学生成绩表student,现在要用decode函数实现以下几个功能:成绩85,显示优秀;70显示良好;60及格;否则是不及格。
78、 假设student的编号为id,成绩为score,那么:
79、 select id, decode(sign(score-85),1,'优秀',0,'优秀',-1,
80、 decode(sign(score-70),1,'良好',0,'良好',-1,
81、 decode(sign(score-60),1,'及格',0,'及格',-1,'不及格')))
82、 from student;
83、 补充2:
84、 Decode函数的语法结构如下:
85、 decode (expression, search_1, result_1)
86、 decode (expression, search_1, result_1, search_2, result_2)
87、 decode (expression, search_1, result_1, search_2, result_2, search_n, result_n) decode (expression, search_1, result_1, default)
88、 decode (expression, search_1, result_1, search_2, result_2, default)
89、 decode (expression, search_1, result_1, search_2, result_2, search_n, result_n, default)
90、 decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
91、 以下是一个简单测试,用于说明Decode函数的用法:
92、 SQL create table t as select username,default_tablespace,lock_date from dba_users;
93、 Table created.
94、 SQL select * from t;
95、 USERNAME DEFAULT_TABLESPACE LOCK_DATE
96、 ------------------------------ ------------------------------ ---------
97、 SYS SYSTEM
98、 SYSTEM SYSTEM
99、 OUTLN SYSTEM
100、 CSMIG SYSTEM
101、 SCOTT SYSTEM
102、 EYGLE USERS
103、 DBSNMP SYSTEM
104、 WMSYS SYSTEM 20-OCT-04
105、 8 rows selected.
106、 SQL select username,decode(lock_date,null,'unlocked','locked') status from t;
107、 USERNAME STATUS
108、 ------------------------------ --------
109、 SYS unlocked
110、 SYSTEM unlocked
111、 OUTLN unlocked
112、 CSMIG unlocked
113、 SCOTT unlocked
114、 EYGLE unlocked
115、 DBSNMP unlocked
116、 WMSYS locked
117、 8 rows selected.
118、 SQL select username,decode(lock_date,null,'unlocked') status from t;
119、 USERNAME STATUS
120、 ------------------------------ --------
121、 SYS unlocked
122、 SYSTEM unlocked
123、 OUTLN unlocked
124、 CSMIG unlocked
125、 SCOTT unlocked
126、 EYGLE unlocked
127、 DBSNMP unlocked
128、 WMSYS
129、 8 rows selected.
以上就是decode这篇文章的一些介绍,希望对大家有所帮助。