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;