本文主要介紹了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;
大家學會了嗎?趕緊動手嘗試一下吧。
相關推薦: