Oracle函授有以下幾個分類:
數(shù)字函數(shù)逊抡、字符函數(shù)、日期函數(shù)拇勃、轉(zhuǎn)換函數(shù)孝凌、集合函數(shù)、分析函數(shù)
數(shù)字函數(shù):
函數(shù)名稱 | 作用 |
---|---|
abs(n) | 返回n的絕對值 |
ceil(n) | 返回>=n的最小整數(shù) |
floor(n) | 返回>=n的最大整數(shù) |
round(n瓣赂,[m]) | 四舍五入運算,如果m缺省則四舍五入到整數(shù)位 m<0,四舍五入到小數(shù)點的前m位,m>0四舍五入到小數(shù)點的后m位 |
trunc(n,[m]) | 截取數(shù)字,如果m缺省則將小數(shù)位截去 m<0,截取到小數(shù)點的前m位,m>0截取到小數(shù)點的后m位 |
select abs(-1.3),ceil(-1.3),ceil(1.3),
floor(-2.6),floor(2.6),
round(-888.689),round(-888.689,2),round(-889.689,-2),
trunc(-888.689),trunc(-888.689,2),trunc(-888.689,-2)
from dual
字符函數(shù):
lpad(s1,n,s2):在字符串S1的左端填充字符串S2寨躁,直到填充后的S1總長度為n牙勘,S2的缺省值為空格方面,如果S1的長度>n,則直接返回S1左端n個字符。
rpad(s1,n,s2):同理在右端
substr(s1,m,n):取得字串s1從m開始恭金,長度為n的子串,m>0表示從頭開始搜索颓屑,m<0表示從尾開始
select substr('天氣真好耿焊!',1,3),
substr('我一點都不開心',3,5)
from dual
ltrim(s1,set):從左端開始逐一取得字串s1左端包含的set中的任何字符罗侯, 當(dāng)遇到不是set中的字符是,則結(jié)束并返回剩余結(jié)果
SELECT ltrim('天氣真好','天') from dual
#氣真好
rtrim(s1,set):從右端開始逐一取得字串s1右端包含的set中的任何字符,當(dāng)遇到不是set中的字符是钩杰,則結(jié)束并返回剩余結(jié)果
SELECT rtrim('jhsony','ny') from dual
#jhso
trim(c FROM s2):從字串s2的頭部讲弄、尾部、或兩端截去字符c(c只能夠是一個字符)當(dāng)遇到不是set中的字符是避除,則結(jié)束并返回剩余結(jié)果
SELECT trim('j' from 'jhsony') from dual
#hsony
nvl(a,b) 函數(shù)nvl 判斷a表達式驹饺,如果a為空則返回b,通常用來判斷某個字段的值是否為空赏壹,用途十分廣泛的。
如果為空昔瞧,則傳回b的值。當(dāng)然我們一般是讓b=0凝化,你也可以賦其它的值1,2,3,4等等酬荞。
select * from ima_file
select nvl(ima03,1) from ima_file where ima01='E.CN.0228R'
decode(字段,條件1,值1,條件2,值2)
針對同一字段有不同值的時候,可以用decode 來簡化SQL語句
日期函數(shù):
sysdate:返回系統(tǒng)當(dāng)前日期時間
systimestamp:返回系統(tǒng)當(dāng)前日期時間和時區(qū)
current_date:返回當(dāng)前回話時區(qū)所對應(yīng)的日期和時間
current_timestamp:返回當(dāng)前回話時區(qū)所對應(yīng)的日期時間
localtimestamp:返回當(dāng)前回話時區(qū)所對應(yīng)的日期時間
systimestamp:返回系統(tǒng)當(dāng)前日期時間和時區(qū)
sessiontimezone:返回當(dāng)前回話所在的時區(qū)
dbtimezone:返回資料庫所在的時區(qū)
查詢會用到的函數(shù):
INTERSECT:取兩個結(jié)果的交集
MINUS:獲取兩個結(jié)果集的差集枪向,返回在第一個結(jié)果集中存在但是第二個結(jié)果集中不存在的記錄
UNION ALL:獲取兩個結(jié)果的并集咧党,但不會去掉合并結(jié)果中重復(fù)的記錄
UNION:獲取兩個結(jié)果的并集,且去掉合并結(jié)果中重復(fù)的記錄
WITH 表名 as (SQL子查詢語句):可以將(SQL子查詢語句復(fù)用)
START WITH ... CONNECT BY PRIOR ... 實現(xiàn)Oracle層次查詢
EXISTS 相關(guān)子查詢是指需要應(yīng)用主查詢列表中的子查詢語句,需要通過謂詞EXISTS來實現(xiàn)深员,當(dāng)使用EXSISTS謂詞時,如果子查詢存在返回結(jié)果則條件返回TRUE,否則返回FALSE
coalesce(expr1[,expr2]...):返回運算式中第一個not null運算式的結(jié)果
select coalesce('','','','aa','bb') from dual
---------
aa
translate函數(shù)
語法:TRANSLATE(char, from, to)
用法:返回將出現(xiàn)在from中的每個字符替換為to中的相應(yīng)字符以后的字符串倦畅。
若from比to字符串長箱残,那么在from中比to中多出的字符將會被刪除。
三個參數(shù)中有一個是空被辑,返回值也將是空值敬惦。
select translate('abcdefga','abc','wo') 返回值 from dual;
--返回值
wodefgw
分析:該語句要將'abcdefga'中的'abc'轉(zhuǎn)換為'wo',
由于'abc'中'a'對應(yīng)'wo'中的'w',
故將'abcdefga'中的'a'全部轉(zhuǎn)換成'w';
而'abc'中'b'對應(yīng)'wo'中的'o',
故將'abcdefga'中的'b'全部轉(zhuǎn)換成'o';
'abc'中的'c'在'wo'中沒有與之對應(yīng)的字符,
故將'abcdefga'中的'c'全部刪除;
簡單說來俄删,就是將from中的字符轉(zhuǎn)換為to中與之位置對應(yīng)的字符,
若to中找不到與之對應(yīng)的字符畴椰,返回值中的該字符將會被刪除。
在實際的業(yè)務(wù)中抓艳,可以用來刪除一些異常數(shù)據(jù),
比如表a中的一個字段t_no表示電話號碼帚戳,
而電話號碼本身應(yīng)該是一個由數(shù)字組成的字符串玷或,
為了刪除那些含有非數(shù)字的異常數(shù)據(jù)儡首,
就用到了translate函數(shù):
delete from a where length(translate(trim(a.t_no),'0123456789' || a.t_no, '0123456789')) <> length(trim(a.t_no))
replace函數(shù)
語法:REPLACE(char, search_string,replacement_string)
用法:將char中的字符串search_string全部轉(zhuǎn)換為字符串replacement_string。
舉例
select REPLACE('fgsgswsgs', 'fk' ,'j') 返回值 from dual;
返回值
fgsgswsgs
select REPLACE('fgsgswsgs', 'sg' ,'eeerrrttt') 返回值 from dual;
返回值
fgeeerrrtttsweeerrrttts
分析:第一個例子中由于'fgsgswsgs'中沒有與'fk'匹配的字符串偏友,
故返回值仍然是'fgsgswsgs'蔬胯;
第二個例子中將'fgsgswsgs'中的字符串'sg'全部轉(zhuǎn)換為'eeerrrttt'。
總結(jié):綜上所述位他,replace與translate都是替代函數(shù)氛濒,只不過replace針對的是字符串,而translate針對的是單個字符鹅髓。