Oracle 一些函數的使用
nvl 函數
通過查詢獲得某個字段的合計值,如果這個值位null將給出一個預設的默認值
selectnvl(sum(t.dwxhl),1)fromtb_jhdetwherezydm=-1
這裏關心的nvl的用法,nvl(arg,value)代表如果前面的arg的值為null那麽返回的值為後面的value
ESCAPE
escape關鍵字經常用於使某些特殊字符,如通配符:‘%’,‘——’轉義為他們原來的字符的意義,被定義的轉義字符通常使用‘\’,但是有時候也可以使用其他符號。
轉義字符為d,沒有實現轉義功能;
SQL>select*fromtestwheretestlike‘sddd_%‘escape‘d‘;
查找包含所有‘_‘的字段。
SQL>select*fromtestwheretestlike‘%\_%‘escape‘\‘;
連接字符串 concat ||
--concat只能連接兩個字符串,連接多個需要嵌套調用不方便 SQL>selectconcat(‘aa‘,‘bb‘)fromdual; CONCAT(‘AA‘,‘BB‘) ----------------- aabb --||直接連接多個字符串 SQL>select‘aa‘||‘bb‘||‘cc‘fromdual; ‘AA‘||‘BB‘||‘CC‘ ---------------- aabbcc
字符串截取
substr(字符串,截取開始位置,截取長度) //返回截取的字
substr(‘HelloWorld‘,0,1)//返回結果為‘H‘*從字符串第一個字符開始截取長度為1的字符串
長度計算函數 length()與lengthb()
SQL>selectlength(‘新春快樂‘)fromdual; LENGTH(‘新春快樂‘) ------------------ SQL>selectlengthb(‘新春快樂‘)fromdual; LENGTHB(‘新春快樂‘) ------------------- 區別:length求得是字符長度, lengthb求得是字節長度。 ?
INSTR函數
-- 在指定的字符串中檢索指定字符所在的索引位置
SQL>selectinstr(‘hello‘,‘l‘)fromdual; INSTR(‘HELLO‘,‘L‘) ------------------ 在hellowolrd中截取出來world字符串? SQL>selectsubstr(‘helloworld‘,instr(‘helloworld‘,‘‘))fromdual; SUBSTR ------ world 已選擇1行。 SQL>selectsubstr(‘helloworld‘,instr(‘helloworld‘,‘‘)+1)fromdual; SUBST ----- world 已選擇1行。 lpad() rpad() 參數1:指定原始的串 參數2:固定長度 參數3:填充的字符SQL>selectlpad(‘jack‘,10,‘$‘)fromdual; LPAD(‘JACK‘,10,‘$‘) ---------- $$$$$$jack selectrpad(‘jack‘,10,‘$‘)fromdual; ----------- jack$$$$$$
Next_day
計算出來下一個星期一是幾號?
selectnext_day(sysdate,‘星期一‘)fromdual;
round 四舍五入
NVL (expr1, expr2):
expr1為NULL,返回expr2;不為NULL,返回expr1。註意兩者的類型要一致
NVL2 (expr1, expr2, expr3) :
xpr1不為NULL,返回expr2;為NULL,返回expr3。expr2和expr3類型不同的話,expr3會轉換為expr2的類型
NULLIF (expr1, expr2):
相等返回NULL,不等返回expr1
decode()
主要作用:將查詢結果翻譯成其他值(即以其他形式表現出來,以下舉例說明);
使用方法:
Select decode(columnname,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)
From talbename
Where …
其中columnname為要選擇的table中所定義的column,
·含義解釋:
decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)的理解如下:
if(條件==值1) then return(翻譯值1) elsif(條件==值2) then return(翻譯值2) ...... elsif(條件==值n) then return(翻譯值n) else return(缺省值) endif註:其中缺省值可以是你要選擇的column name 本身,也可以是你想定義的其他值,比如Other等;
表復制快速的建立的表結構?
create table emp10 as select * from emp where 1=12; insert into emp30 select * from emp where deptno=30;
Oracle 一些函數的使用