Oracle常用函數
1、NVL()函數
語法:NVL(expr1, expr2)
含義:如果expr1的計算結果爲null值,則NVL()返回expr2。如果expr1的計算結果不是null值,則返回
expr1.expr1和expr2可以是任意一種數據類型。如果expr1與expr2的結果皆爲null值,則NVL()返回
null。
返回值類型:字符型、日期型、日期時間型、數值型、貨幣型、邏輯型或null值。
Eg1: select nvl(o.bill_aud_flag,'0') from order_item o;
2、NVL2()函數
語法:NVL(expr1,expr2,expr3)
含義:如果expr1的計算結果爲null值,則NVL()返回expr3,如果expr1的計算結果不爲null值,則返
回expr2.
Eg1: select ename,sal,comm,nvl2(comm,'sal+comm','sal') income from emp;
3、NULLIF()函數
語法:NULLIF(expr1,expr2)
含義:如果expr1和expr2相等,則返回NULL,否則返回expr1.
注意:expr1不能爲null,否則會報錯.
Eg1: select ename,sal,comm,nullif(sal,comm ) result from emp;
4、DECODE()函數
語法:decode(value,value1,result1,value2,result2,default_result)
含義:如果value和value1相等,則返回result1,如果value和value2相等,則返回result2,否
則返回default_result.
Eg1: select decode(o.service_offer_id,'50040001','新裝','50040002','退租','其它') as
登記事項 from order_item o;
5、instr()函數
語法:instr(string1,string2[,start_position[,nth_appearance]])
含義:string1à源字符串,要在此字符串中查找。string2à要在string1中查找的字符串.
start_positionà代表從string1的哪個位置開始查找。此參數可選,如果省略默認爲1.
字符串索引從1開始。如果此參數爲正,從左到右開始檢索,如果此參數爲負,從右到左
檢索,返回要查找的字符串在源字符串中的開始索引。nth_appearanceà代表要查找第幾
次出現的string2. 此參數可選,如果省略,默認爲 1.如果爲負數系統會報錯。
注意:如果string2在string1中沒有找到,instr函數返回0.
Eg1: select instr('123,456,789','1234') fromdual;-- 0
select instr('123,456,789','12') fromdual;-- 1
select instr('123,456,789','123') fromdual;-- 1
select instr('123,456,789','789') fromdual;-- 9
6、substr()函數
語法:substr( string, start_position, [length] )
含義:stringà源字符串,要在此字符串中查找。start_positionà代表從string的哪個位置
開始查找。如果此參數爲正,從左到右開始檢索,如果此參數爲負,從右到左檢索。
length爲可選參數,如果爲空,代表查找到的整個字符串,如果不爲空,代表位數。
Eg1: select substr('This is a test', 6, 2) from dual; -- is
select substr('This is a test', 6) from dual;-- is a test
select substr('This is a test', 0) from dual;-- This is a test
select substr('This is a test', -0) from dual; -- This is a test
select substr('TechOnTheNet', -3, 3) from dual; -- Net
select substr('TechOnTheNet', -6, 3) from dual; -- The
select substr('TechOnTheNet', -50, 3) from dual;-- 返回空
7、 replace()函數
語法:replace (char, search_string, [replace_str] )
含義:char:等待替換的字符串,search_string:搜索需要替換的字符串,replace_str替換
字符串。如果replace_str缺省或者爲null,那麼所有char中出現的search_string都
將被移除,如果search_string爲null,那麼結果就是char。
Eg1: select replace('acdd','cd','ef') from dual; --> aefd
select replace('acdd','cd','') from dual; --> ad
select replace('acdd','ef') from dual; -->acdd
select replace('acdd','','') from dual; -->acdd
注意:replace()函數是字符串級別的替代
8、 translate()函數
語法:replace (char,from_string,to_string)
含義:返回將(所有出現的)from_string中的每個字符都替換爲to_string中的相應字符以
後的char,如果from_string比to_string長,那麼在 from_string中而不在to_string
中的額外字符將從char中被刪除,因爲它們沒有相應的替換字符。to_string不能空。
Oracle 將空字符串解釋爲null,並且如果translate中的任何參數爲null,那麼結果
也是null。
Eg1: select translate('qwertyuiop','qwert','12345') from dual; --12345yuiop
select translate('qwertyuiop','qwert','1234567') from dual;-12345yuiop
select translate('qwertyuiop','qwertyuiop','1234567') from dual; -- 1234567
select translate('qwertyuiop','qwertyui','') from dual; -- 爲空
select translate('qwertyuiop','qwertyui',null) from dual; -- 爲空
注意:translate ()函數是字符級別的替代.
9、lower()函數
語法:lower('AaBbCcDd')
含義:返回字符串,並將所有的字符小寫
Eg1: select lower('AaBbCcDd') from dual; -- aabbccdd
10、upper()函數
語法:upper('AaBbCcDd')
含義:返回字符串,並將所有的字符大寫
Eg1: select lower('AaBbCcDd') from dual; -- AABBCCDD
11、add_months ()函數
語法:add_months(DATE,NUMBER)
含義:ADD_MONTHS函數在輸入日期上加上指定的幾個月返回一個新的日期。如果給出
一負數,返回日期之前幾個月日期。add_months (DATE,NUMBER)中的NUMBER應
當是整數,給出小數時,正數被截爲小於該數的最大整數,負數被截爲大於該數的
最小整數。
Eg1: select sysdate from dual; -- 2014/7/24 15:32:54
select add_months(sysdate,2.9) from dual; -- 2014/9/24 15:32:54
select add_months(sysdate,2.1) from dual; -- 2014/9/24 15:32:54
select add_months(sysdate,-2.9) from dual; -- 2014/5/24 15:32:54
select add_months(sysdate,-2.1) from dual;-- 2014/5/24 15:32:54
12、concat ()函數
語法:concat(string1,string2)
含義:concat只能連接兩個字符串,連接多個需要嵌套調用不方便,用“||”可以直接連接多個字符串
Eg1: select concat('aa','bb') from dual; -- aabb
select concat('aa','bb','cc') from dual;-- 有錯,只能連接兩個
select 'aa'||'bb'||'cc' from dual; -- aabbcc