创新互联OceanBase教程:OceanBaseDECODE

DECODE 函数依次用参数 search 与 condition 做比较,直至 condition 与 search 的值相等,则返回对应 search 后跟随的参数 result 的值。如果没有 search 与 condition 相等,则返回参数 default 的值。

创新互联网站建设公司一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!专注中小微企业官网定制,成都网站建设、做网站,塑造企业网络形象打造互联网企业效应。

语法

DECODE (condition, search 1, result 1, search 2, result 2 ... search n, result n, default)

DECODE 函数的含义可以用 IF...ELSE IF...END 语句进行解释:

IF condition = search 1 THEN
RETURN(result 1)
ELSE IF condition = search 2 THEN
RETURN(result 2)
......
ELSE IF condition = search n THEN
RETURN(result n)
ELSE
RETURN(default)
END IF

参数

参数

说明

condition、search 1...search n、result 1...result n、default

数值型(NUMBERFLOATBINARY_FLOAT 或 BINARY_DOUBLE)或字符型( CHARVARCHAR2NCHAR 或 NVARCHAR2)的表达式。

注意 

search 1 ~ search n 不能为条件表达式,这种情况只能用 CASE WHEN THEN END 语句解决:

WHEN CASE condition = search 1 THEN
RETURN(result 1)
ELSE CASE condition = search 2 THEN
RETURN(result 2)
......  
ELSE CASE condition = search n THEN
RETURN(result n)
ELSE
RETURN(default)
END

示例

示例 1: 使用 DECODE 比较数值的大小。

以下语句使用 DECODE 函数来返回数值 10 与 20 当中较小的那个数。SIGN() 函数用来计算两个值差的符号,由于 10 小于 20,所以差为负数,SIGN() 返回 -1。此时 DECODE 函数将参数 -1 与 SIGN() 函数的返回值作比较。相等时,返回值 10,不相等时,返回值 20:

SELECT DECODE(SIGN(10-20),-1,10,20) FROM DUAL;

返回结果如下:

+------------------------------+
| DECODE(SIGN(10-20),-1,10,20) |
+------------------------------+
|                           10 |
+------------------------------+

示例 2:使用 DECODE 函数查看数据中是否包含字符 S

以下语句创建了表 EMP,表中包含列 ename 和 sal,并向其中插入值:

CREATE TABLE EMP(ename VARCHAR(30),sal NUMBER);
INSERT INTO EMP VALUES('CLARK', 2750);       
INSERT INTO EMP VALUES('KING', 5300);       
INSERT INTO EMP VALUES('MILLER', 1600);        
INSERT INTO EMP VALUES('ADAMS', 1400);       
INSERT INTO EMP VALUES('FORD', 3300);      
INSERT INTO EMP VALUES('JONES', 3275);      
INSERT INTO EMP VALUES('SCOTT', 3300);    
INSERT INTO EMP VALUES('SMITH', 1100);   
INSERT INTO EMP VALUES('ALLEN', 1900); 
INSERT INTO EMP VALUES('BLAKE', 3150); 
INSERT INTO EMP VALUES('JAMES', 1250);  
INSERT INTO EMP VALUES('MARTIN', 1550);
INSERT INTO EMP VALUES('TURNER', 1800);
INSERT INTO EMP VALUES('WARD', 1550);

以下语句通过函数 INSTR() 返回字符 S 在列 ename 的值中出现的位置,若没有出现过则返回 0。此时 DECODE 函数将 INSTR 函数的返回值与 0 做比较,相等时说明字符 S 在值中没有出现过,则 DECODE 函数返回值 不含有 S,否则返回值 含有 S :

SELECT ENAME, SAL, DECODE(INSTR(ename, 'S'), 0, '不含有 S', '含有 S') AS INFO FROM EMP;

查询结果如下:

+--------+------+------------+
| ENAME  | SAL  | INFO       |
+--------+------+------------+
| CLARK  | 2750 | 不含有 S    |
| KING   | 5300 | 不含有 S    |
| MILLER | 1600 | 不含有 S    |
| ADAMS  | 1400 | 含有 S      |
| FORD   | 3300 | 不含有 S    |
| JONES  | 3275 | 含有 S      |
| SCOTT  | 3300 | 含有 S      |
| SMITH  | 1100 | 含有 S      |
| ALLEN  | 1900 | 不含有 S    |
| BLAKE  | 3150 | 不含有 S    |
| JAMES  | 1250 | 含有 S      |
| MARTIN | 1550 | 不含有 S    |
| TURNER | 1800 | 不含有 S    |
| WARD   | 1550 | 不含有 S    |
+--------+------+------------+

分享名称:创新互联OceanBase教程:OceanBaseDECODE
标题链接:http://www.shufengxianlan.com/qtweb/news45/104795.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联