1. 程式人生 > >Oracle 一些函數的使用

Oracle 一些函數的使用

表復制 cell weight 默認 content comm space 查詢 連接

nvl 函數

通過查詢獲得某個字段的合計值,如果這個值位null將給出一個預設的默認值

selectnvl(sum(t.dwxhl),1)fromtb_jhdetwherezydm=-1

這裏關心的nvl的用法,nvl(arg,value)代表如果前面的arg的值為null那麽返回的值為後面的value

ESCAPE

escape關鍵字經常用於使某些特殊字符,如通配符:‘%’,‘——’轉義為他們原來的字符的意義,被定義的轉義字符通常使用‘\’,但是有時候也可以使用其他符號。

轉義字符為d,沒有實現轉義功能;

SQL>
select*fromtestwheretestlikesddd_%escaped;

查找包含所有‘_‘的字段。

SQL>select*fromtestwheretestlike%\_%escape\;

 連接字符串 concat ||

--concat只能連接兩個字符串,連接多個需要嵌套調用不方便
SQL>selectconcat(aa,bb)fromdual;
 
CONCAT(AA,BB)
-----------------
aabb
--||直接連接多個字符串
SQL>select
aa||bb||ccfromdual; 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 一些函數的使用