OceanBase DECODE

2021-06-24 10:10 更新

DECODE 函數(shù)依次用參數(shù) search 與 condition 做比較,直至 condition 與 search 的值相等,則返回對應(yīng) search 后跟隨的參數(shù) result 的值。如果沒有 search 與 condition 相等,則返回參數(shù) default 的值。

語法

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

DECODE 函數(shù)的含義可以用 IF...ELSE IF...END 語句進(jìn)行解釋:

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

參數(shù)

參數(shù)

說明

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

數(shù)值型(NUMBERFLOAT、BINARY_FLOAT 或 BINARY_DOUBLE)或字符型( CHAR、VARCHAR2、NCHAR 或 NVARCHAR2)的表達(dá)式。

注意 

search 1 ~ search n 不能為條件表達(dá)式,這種情況只能用 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 比較數(shù)值的大小。

以下語句使用 DECODE 函數(shù)來返回數(shù)值 10 與 20 當(dāng)中較小的那個數(shù)。SIGN() 函數(shù)用來計算兩個值差的符號,由于 10 小于 20,所以差為負(fù)數(shù),SIGN() 返回 -1。此時 DECODE 函數(shù)將參數(shù) -1 與 SIGN() 函數(shù)的返回值作比較。相等時,返回值 10,不相等時,返回值 20:

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

返回結(jié)果如下:

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

示例 2:使用 DECODE 函數(shù)查看數(shù)據(jù)中是否包含字符 S。

以下語句創(chuàng)建了表 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);

以下語句通過函數(shù) INSTR() 返回字符 S 在列 ename 的值中出現(xiàn)的位置,若沒有出現(xiàn)過則返回 0。此時 DECODE 函數(shù)將 INSTR 函數(shù)的返回值與 0 做比較,相等時說明字符 S 在值中沒有出現(xiàn)過,則 DECODE 函數(shù)返回值 不含有 S,否則返回值 含有 S :

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

查詢結(jié)果如下:

+--------+------+------------+
| 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    |
+--------+------+------------+
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號