1. 程式人生 > >oracle相關函式

oracle相關函式

(大寫的PS:oracle儲存過程測試進不去解決方案:重新編譯;)

TRUNC(sysdate, 'd') + 1   ////表示今天所在周的週一的年月日,如今天是2016.04.21週四,則TRUNC(sysdate, 'd') + 1表示2016.04.18週一

 select trunc(sysdate) from dual;

case when 1>0 then 1 else 0 end  ////表示當1>0條件滿足時取1,否則取0

 

TO_CHAR(sysdate, 'yyyyMMdd')   ////得到字串"2016/04/21" PS:把日期或數字轉換成字串

 

MONTHS_BETWEEN(DATE1,DATE2)   ////返回兩個日期之間的月份數

 

select a.*,b.* from a,b wherea.id=b.id(+)   ///加號在“=”右邊表示左連(left join)  相當於select a.*,b.* from a left join b on a.id=b.id   a為主表

 

dense_rank()over(order by 列名排序)的結果是連續的,如 1 1 1 2

 

||  字串連線符比如:'aaa' || 'bbb'= 'aaabbb'

 

EXECUTE IMMEDIATE,一般用於執行動態sql,表不存在可能會報錯

 

substr(字串,擷取開始位置,擷取長度) //返回擷取的字

 

instr('源字串' , '目標字串' ,'開始位置','第幾次出現')

 

nvl(a,b),當a不為null時返回a,當a為null時返回b。  nvl(REMARKS,' ')<>' '判斷欄位不為null和空,length(REMARKS)>1,可能會導致語句執行時間過長;

 

rpad函式從右邊對字串使用指定的字元進行填充

rpad('tech', 7); 將返回'tech '

rpad('tech', 2); 將返回'te'

rpad('tech', 8, '0'); 將返回'tech0000'

 

round(x,y)   ////x,y,數字型表示式,如果y不為整數則擷取y整數部分,如果y>0則四捨五入為y位小數,如果y小於0則四捨五入到小數點向左第y位

 

extract(month from sysdate)  ///獲取當前時間的月份

exists 和in

1) select * from T1 where exists(select 1 from T2where T1.a=T2.a) ;

    T1資料量小而T2資料量非常大時,T1<<T2 時,1) 的查詢效率高。

2) select * from T1 where T1.a in (select T2.a fromT2) ;

     T1資料量非常大而T2資料量小時,T1>>T2 時,2) 的查詢效率高。

 

DECODE('X','b','c','d','e',0)  ----當X=b時得到c,當x=d時得到e,當x <>b and x<>d時得到0;