Oracle之函數(shù)

在Oralce中定義了一部分內(nèi)部函數(shù)疼进,通過使用這部分函數(shù)可以使用戶在進(jìn)行一些操作的時(shí)候更加的方便。

日期函數(shù)

日期函數(shù)用于處理date類型的數(shù)據(jù)信殊,默認(rèn)情況下日期格式為dd-mon-yyyy 即 12-Mon-2004炬称。

sysdate函數(shù) ? ?返回系統(tǒng)時(shí)間

to_date函數(shù) ? ? 用來做日期轉(zhuǎn)換

extract(fmt from d) 用于從一個(gè)date或者interval類型中截取到特定的部分

add_months(d,n) 返回某一時(shí)間d之前或之后n個(gè)月的時(shí)間

last_day(d) 返回指定日期所在月份的最后一天的日期

sysdate

顯示當(dāng)前的日期,返回date類型數(shù)據(jù)涡拘。

select sysdate from dual;

查看當(dāng)前的日期

select ename,hiredate from emp where hiredate<(sysdate-8);

查找出已經(jīng)入職八個(gè)月的員工

to_date

to date函數(shù)用來做日期轉(zhuǎn)換玲躯,主要用于日期格式轉(zhuǎn)換,在Oralce中日期的默認(rèn)格式為日-月-年鳄乏,月用英文表示跷车,但有時(shí)輸入的時(shí)候會出現(xiàn)格式不同意,使用該函數(shù)可以設(shè)置日期的格式來保證存入橱野。

to_date('xxxx-xx-xx','yyyy-mm-dd'))

前面放置的是日期朽缴,逗號后面放置的日期格式。yyyy或yy表示年水援,dd表示天密强,mm表示月茅郎。注:后面年月日的順序可以隨意放置只需要和前面對應(yīng)即可。

insert into emp (empno,ename,hiredate) values (7935,'FRANK','22-sep-2017');

insert into emp (empno,ename,hiredate) values(7936,'Rose',to_date('2017-09-02','yyyy-mm-dd'));

使用年-月-日的格式想emp表插入新的數(shù)據(jù):

extract

extract表示提取date類型數(shù)據(jù)的部分內(nèi)容或渤,可提取的內(nèi)容為年月日系冗。

extract(fmt from d)

d表示的是被提取的部分,fmt表示提取的內(nèi)容可以為 YEAR,MONTH,DAY薪鹦。

select extract(year from sysdate) year from dual;

dual表示一個(gè)虛表掌敬,from前面的year表示別名,sysdate當(dāng)前日期

select (extract(year from sysdate)-extract(year from hiredate))||'年' KING的工作年限 from emp where ename='KING';

查詢emp表中KING的工作年限池磁,假定KIND進(jìn)入公司后一直在為公司服務(wù)

add_months

add_months(d,n) 表示d時(shí)間之前或之后n個(gè)月的時(shí)間涝开,當(dāng)n為負(fù)數(shù)表示之前n個(gè)月,n為正數(shù)表示之后那個(gè)月框仔。

select ename,hiredate from emp where sysdate > add_months(hiredate,10*12);

顯示滿十年服務(wù)年限的員工的姓名和受雇日期

last_day

last_day(d) 返回指定日期所在月份的最后一天舀武,若2017.10.29則返回2017.10.31,這個(gè)函數(shù)主要是用于根據(jù)年份和月份返回該月最后一天离斩。

select last_day(to_date('1999-02-01','yyyy-mm-dd')) year from dual;

select last_day(to_date('2000-02-01','yyyy-mm-dd')) year from dual;

select ename,hiredate from emp where hiredate = (last_day(hiredate)-2);

找出各月倒數(shù)第三天受雇的所有員工

字符函數(shù)

字符函數(shù)是指對字符進(jìn)行操作的函數(shù)银舱。

lower(char) ? ? ? ? 將字符串轉(zhuǎn)化為小寫形式

upper(char) ? ? ? ?將字符串轉(zhuǎn)化為大寫形式

length(char) ? ? ? ?返回字符串長度

substr(char,m,n) 取字符串的子串(從1開始計(jì)數(shù),m表示從第幾個(gè)開始跛梗,n表示取幾個(gè))

replace (char1,serch_string,replace_string) 將一個(gè)字符串內(nèi)的某個(gè)字符或字符串全部替換為新的字符或者字符串寻馏。

instr(char1,char2,start_position,nth_appearance) 對字符串進(jìn)行判斷,判斷其是否含有指定的字符核偿,如果存在則返回該字符串所在的位置诚欠。

select lower(ename),sal from emp;

將所有用戶的名字按小寫方式顯示

select upper(ename),sal from emp;

將所有用戶的名字按大寫方式顯示

select ename from emp where length(ename)=5;

顯示正好為5字符的員工姓名

select lower(substr(ename,1,3)) from emp;

顯示所有員工姓名的前三個(gè)字符,并小寫顯示

select upper(substr(ename,1,1))||lower(substr(ename,2,(length(ename)-1))) 首字母大寫 from emp;

以首字母大寫的方式顯示所有員工的姓名

首字母大寫漾岳,其余小寫思路:

1.取出來首字母大寫顯示

select upper(substr(ename,1,1)) from emp;

2.取出來后面所有字母小寫顯示

select lower(substr(ename,2)) from emp;

或者

select lower(substr(ename,2,(length(ename)-1))) from emp;

3.使用連接運(yùn)算符||連接起來

select upper(substr(ename,1,1))||lower(substr(ename,2,(length(ename)-1))) 首字母大寫 from emp;

replace

將一個(gè)字符串內(nèi)的某個(gè)字符或字符串全部替換為新的字符或者字符串轰绵。

replace (char1,serch_string,replace_string)

char1表示原來的字符,serch_string表示你要搜索的字符尼荆,replace_string表示替換為的字符左腔。

select replace('aaaaaaabbbbbbbbbcccccc','a','d') fromn dual;

aaaaaaabbbbbbbbbcccccc為需要替換的函數(shù),把a(bǔ)替換為d

instr

對字符串進(jìn)行判斷捅儒,判斷其是否含有指定的字符液样,如果存在則返回該字符串所在的位置。

instr(char1,char2,start_position,nth_appearance)

char1巧还,查找char2字符串鞭莽,start_position開始位置,nth_appearance查找第幾次出現(xiàn)的位置麸祷。

select instr('qweAfghAiio','A',1,2) from dual;

查詢字母A 第二次出現(xiàn)在了我的字符串啥位置

數(shù)學(xué)函數(shù)

數(shù)學(xué)函數(shù)包括cos澎怒、cosh、exp摇锋、ln丹拯、log站超、sin、sinh乖酬、sqrt死相、tan、tanh咬像、acos算撮、asin、stan县昂、round肮柜、trunc、mod倒彰、floor审洞、ceil,但最常用的是round待讳。

round(n,[m]) 該函數(shù)用于四舍五入芒澜,如果去掉m表示四舍五入到整數(shù),如果m是正數(shù)表示四舍五入到小數(shù)點(diǎn)后面m位创淡,如果m是負(fù)數(shù)痴晦,表示四舍五入到前面m位

trunc(n,[m]) 該函數(shù)用于截取數(shù)字,如果省掉m琳彩,就截去小數(shù)部分誊酌,如果m是正數(shù)就截取到小數(shù)點(diǎn)后m位,如果m是負(fù)數(shù)就截去到小數(shù)點(diǎn)的前m位

mod(m,n) 求余數(shù)露乏,mod中如果n是0則返回m的值

floor(n) 返回小于或是等于n的最大整數(shù)碧浊,如23.46返回23

ceil(n) 返回大于或是等于n的最小整數(shù),如23.46返回24

round和trunc的區(qū)別是round是四舍五入施无,trunc是直接去掉尾部辉词,各有優(yōu)劣看具體情況使用。

select round(sal,1) from emp where ename='JONES';

將JONES四舍五入猾骡,如果四舍五入完之后小數(shù)點(diǎn)后面有0則會默認(rèn)省去

select ename,round(sal,-1) from emp where ename in ('SCOTT','KING','ADAMS','JONES');

select ename,round(sal,1) from emp where ename in ('SCOTT','KING','ADAMS','JONES');

select ename,round(sal) from emp where ename in ('SCOTT','KING','ADAMS','JONES');

上述3個(gè)命令都用來獲取薪資,只是后面小數(shù)不同比較區(qū)別即可

Select mod(2,1) from dual;

求2對1的余數(shù)

Select mod(2,0) from dual;

mod中如果n是0則返回m的值

select floor(23.46) from dual;

select ceil(23.46) from dual;

select ceil(23) from dual;

select ename,trunc(sal/22) 日薪金 from emp;

顯示在一個(gè)月30天的情況下所有員工的日薪金敷搪,忽略余數(shù)

abs(n) 返回?cái)?shù)字的絕對值

acos(n) 返回?cái)?shù)字的反余弦值

asin(n) 返回?cái)?shù)字的反正弦值

atan(n) 返回?cái)?shù)字的正切值

cos(n) 返回?cái)?shù)字余弦值

exp(n) 返回e的n次冪

log(m,n) 返回對數(shù)值

power(m,n) 返回m的n次冪

轉(zhuǎn)換函數(shù)

轉(zhuǎn)換函數(shù)用于將一種類型轉(zhuǎn)化為另一種類型兴想。常用的轉(zhuǎn)換函數(shù)為to_char,將一種類型轉(zhuǎn)換成字符串類型赡勘。

to_char('日期','類型');

類型一般包含下面幾種

yy ? ? ? ? 兩位數(shù)字的年份 2001->04

yyyy ? ? 四位數(shù)字年份 2004

mm ? ? ?兩位數(shù)字的月份 8月->08

dd ? ? ? ?兩位數(shù)字的天數(shù) 30號->30

hh24 ? ?24進(jìn)制小時(shí) 下午八點(diǎn)->20

hh12 ? ?12進(jìn)制小時(shí) 下午八點(diǎn)->08

mi ? ? ? ?分鐘

ss ? ? ? ?秒

9 ? ? ? ? 顯示數(shù)字嫂便,并忽略前面0

0 ? ? ? ? 顯示數(shù)字,如位數(shù)不足闸与,則用0補(bǔ)齊

. ? ? ? ? ?指定位置顯示小數(shù)點(diǎn)

, ? ? ? ? ?指定位置顯示逗號

$ ? ? ? ? 數(shù)字前加美元

L ? ? ? ? 在數(shù)字前加本地貨幣符號(默認(rèn)$)

C ? ? ? ?在數(shù)字前加國際貨幣符號(默認(rèn)USD)

G ? ? ? ?在指定位置顯示組分隔符

D ? ? ? ?在指定位置顯示小數(shù)點(diǎn)符號

select to_date('2017/9/21','yyyy/mm/dd') from dual;

把一個(gè)字符串轉(zhuǎn)換成一個(gè)日期

select to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') from dual;

把一個(gè)日期轉(zhuǎn)換成字符串

select ename,hiredate from emp where to_char(hiredate,'yyyy')=1980;

顯示1980年入職員工

select to_char('88882345.45','L999G999G999D99') from dual;

結(jié)果 $88,882,345.45

系統(tǒng)函數(shù)

系統(tǒng)函數(shù)主要是用于查詢系統(tǒng)當(dāng)前的一些信息毙替,其是直接使用一些固定參數(shù)來獲取當(dāng)前系統(tǒng)的信息岸售。

syscontext('usernv','固定參數(shù)')

//usernv不可更改,sys_context函數(shù)最常用的就是userenv命名空間下的系列參數(shù)

terminal ? ? ? ? ? ? ? ? ? ? ?當(dāng)前會話客戶所對應(yīng)的的終端的標(biāo)識符

lanuage(language) ? ?語言

db_name ? ? ? ? ? ? ? ? ? 當(dāng)前數(shù)據(jù)庫名稱

nls_date_format ? ? ? ?當(dāng)前會話客戶所對應(yīng)的日期格式

session_user ? ? ? ? ? ? 當(dāng)前會話客戶所對應(yīng)的數(shù)據(jù)庫用戶名

current_schema ? ? ? ?當(dāng)前會話客戶所對應(yīng)的默認(rèn)方案名

host ? ? ? ? ? ? ? ? ? ? ? ? ? 返回?cái)?shù)據(jù)庫所在主機(jī)的名稱

單行函數(shù)

NVL(x,value) 它的功能是進(jìn)行內(nèi)容替換厂画,如果x為null凸丸,則NVL函數(shù)返回value的值,否則返回x本身的值

NVL2(x,value1,value2) 如果x非空袱院,則返回value1的值屎慢,否則返回value2的值

select ename,job,sal,nvl(comm,100) comm from emp where sal<2000;

查詢工資是2000元以下的員工的姓名,職位忽洛,工資和獎金腻惠,如果該人沒有獎金則每人發(fā)100元

select ename,sal+comm 總收入 from emp;

查詢每個(gè)人總收入(如果不用這種方法,因?yàn)楠劷鹩械臑榭沼椋詴?bào)錯(cuò))

select ename,sal 工資,nvl(comm,0) 獎金 from emp;

查詢每個(gè)人姓名集灌,工資,獎金

select ename,sal+nvl(comm,0) 總收入 from emp;

查詢每個(gè)人姓名复哆,總收入

其他例子:

select ename,sysdate-hiredate from emp;

對于每一個(gè)員工绝页,顯示其加入公司的天數(shù)

改進(jìn)為(去掉小數(shù)):select ename,trunc(sysdate-hiredate) from emp;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市寂恬,隨后出現(xiàn)的幾起案子续誉,更是在濱河造成了極大的恐慌,老刑警劉巖初肉,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酷鸦,死亡現(xiàn)場離奇詭異,居然都是意外死亡牙咏,警方通過查閱死者的電腦和手機(jī)臼隔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妄壶,“玉大人摔握,你說我怎么就攤上這事《〖模” “怎么了氨淌?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伊磺。 經(jīng)常有香客問我盛正,道長,這世上最難降的妖魔是什么屑埋? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任豪筝,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘续崖。我一直安慰自己敲街,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布严望。 她就那樣靜靜地躺著多艇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪著蟹。 梳的紋絲不亂的頭發(fā)上墩蔓,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音萧豆,去河邊找鬼奸披。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涮雷,可吹牛的內(nèi)容都是我干的阵面。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼洪鸭,長吁一口氣:“原來是場噩夢啊……” “哼样刷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起览爵,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤置鼻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蜓竹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體箕母,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年俱济,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嘶是。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛛碌,死狀恐怖聂喇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蔚携,我是刑警寧澤希太,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站浮梢,受9級特大地震影響跛十,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜秕硝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧远豺,春花似錦奈偏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棺滞,卻和暖如春裁蚁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背继准。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工枉证, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人移必。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓室谚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親崔泵。 傳聞我的和親對象是個(gè)殘疾皇子秒赤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.簡介 數(shù)據(jù)存儲有哪些方式?電子表格憎瘸,紙質(zhì)文件入篮,數(shù)據(jù)庫。 那么究竟什么是關(guān)系型數(shù)據(jù)庫幌甘? 目前對數(shù)據(jù)庫的分類主要是...
    喬震閱讀 1,722評論 0 2
  • SQL ==SQLPLUS== DML(Data Manipulation Language,數(shù)據(jù)操作語言)---...
    蝌蚪1573閱讀 591評論 0 4
  • ORACLE日期時(shí)間函數(shù)大全 TO_DATE格式(以時(shí)間:2007-11-02 13:45:25為例) Year:...
    雨一流閱讀 674評論 0 2
  • 1. select * from emp; 2. select empno, ename, job from em...
    海納百川_4d26閱讀 1,908評論 0 4
  • 每個(gè)人都有自己不同的夢想潮售,有夢想就有追求。凝望著天邊的夜空含潘,思索著夢想與現(xiàn)實(shí)饲做,星空是那樣燦爛,又是那樣寂靜遏弱,像是一...
    瘋子Selina閱讀 246評論 0 0