oracle中decode函數的如何使用

本文主要介紹了oracle中decode函數的使用方法示例,還是比較不錯的,希望大家學完能掌握decode函數的使用,趕緊一起來看一下吧。

decode的幾種用法

1:使用decode判斷字符串是否一樣

DECODE(value,if1,then1,if2,then2,if3,then3,…,else)

含義為
IF 條件=值1 THEN
    RETURN(value 1)

ELSIF 條件=值2 THEN
    RETURN(value 2)
    ……

ELSIF 條件=值n THEN
    RETURN(value 3)
ELSE
    RETURN(default)
END IF

sql測試

select?empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow')?as?name?from?emp?where?rownum<p></p><p>輸出結果</p><p class="jb51code"></p><pre class="brush:plain;">7369?smith  7499?allen  7521?ward  7566?jones  7654?unknow  7698?unknow  7782?unknow  7788?unknow  7839?unknow  7844?unknow

2:使用decode比較大小

select decode(sign(var1-var2),-1,var 1,var2) from dual

sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1

sql測試

select?decode(sign(100-90),-1,100,90)?from?dual

輸出結果

90

100-90=10>0 則會返回1,所以decode函數最終取值為90

反正

select?decode(sign(100-90),1,100,90)?from?dual

輸出結果

100

100-90=10>0返回1,判斷結果為1,返回第一個變量100,最終輸出結果為100

3:使用decode函數分段

工資大于5000為高薪,工資介于3000到5000為中等,工資小于3000為低薪

sql測試

SELECT?  ??ename,sal,  ??DECODE(SIGN(sal?-?5000),  ??????1,  ??????'high?sal',  ??????0,  ??????'high?sal',  ??????-?1,  ??????DECODE(SIGN(sal?-?3000),  ??????????1,  ??????????'mid?sal',  ??????????0,  ??????????'mid?sal',  ??????????-?1,  ??????????DECODE(SIGN(sal?-?1000),  ??????????????1,  ??????????????'low?sal',  ??????????????0,  ??????????????'low?sal',  ??????????????-?1,  ??????????????'low?sal')))  FROM  ??emp

輸出結果

SMITH??800??low?sal  ALLEN?1600?low?sal  WARD?1250?low?sal  JONES?2975?low?sal  MARTIN?1250?low?sal  BLAKE??2850?low?sal  CLARK?2450?low?sal  SCOTT?3000?mid?sal  KING?5000?high?sal  TURNER?1500?low?sal  ADAMS?1100?low?sal  JAMES?950?????low?sal  FORD?3000?mid?sal  MILLER?1300?low?sal

4:利用decode實現表或者試圖的行列轉換

sql測試

SELECT?  ????SUM(DECODE(ENAME,'SMITH',SAL,0))?SMITH,  ????SUM(DECODE(ENAME,'ALLEN',SAL,0))?ALLEN,  ????SUM(DECODE(ENAME,'WARD',SAL,0))??WARD,  ????SUM(DECODE(ENAME,'JONES',SAL,0))?JONES,  ????SUM(DECODE(ENAME,'MARTIN',SAL,0))?MARTIN?FROM?EMP

輸出結果如下

SMITH?ALLEN?WARD??JONES?MARTIN  ?800?1600??1250????2975????1250

5:使用decode函數來使用表達式來搜索字符串

decode (expression, search_1, result_1, search_2, result_2, …., search_n, result_n, default)

decode函數比較表達式和搜索字,如果匹配,返回結果;如果不匹配,返回default值;如果未定義default值,則返回空值。

sql測試

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

輸出結果

SMITH?800??????含有s  ALLEN?1600??不含有s  WARD?1250??不含有s  JONES?2975???含有s  MARTIN?1250???不含有s  BLAKE?2850???不含有s  CLARK?2450???不含有s  SCOTT?3000??含有s  KING?5000??不含有s  TURNER?1500??不含有s  ADAMS?1100??含有s  JAMES?950???????含有s  FORD?3000??不含有s  MILLER?1300??不含有s

Decode函數在實際開發中非常的有用

結合Lpad函數,如何使主鍵的值自動加1并在前面補0

select LPAD(decode(count(記錄編號),0,1,max(to_number(記錄編號)+1)),14,’0′) 記錄編號 from tetdmis

eg:

select decode(dir,1,0,1) from a1_interval

dir 的值是1變為0,是0則變為1

比如我要查詢某班男生和女生的數量分別是多少?

通常我們這么寫:
select count(*) from 表 where 性別 = 男;
select count(*) from 表 where 性別 = 女;

要想顯示到一起還要union一下,太麻煩了

用decode呢,只需要一句話

select sum(decode(性別,男,1,0)),sum(decode(性別,女,1,0)) from 表

eg:

select?sum(decode(siteno,'LT',1,0)),sum(decode(siteno,'SZ',1,0))?from?facd605;    select?sum(case?siteno?when?'LT'?then?1?else?0?end),sum(case?siteno?when?'SZ'?then?1?else?0?end)?from?facd605;

大家學會了嗎?趕緊動手嘗試一下吧。

相關推薦:

php中json_decode函數要注意的問題

php中json_decode函數要注意的問題

php中json_decode函數要注意的問題

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享