oracle学习笔记(二)------函数
函數(shù):單行函數(shù),多行函數(shù)
單行函數(shù):字符函數(shù),Number函數(shù),日期函數(shù),轉(zhuǎn)換函數(shù),系統(tǒng)函數(shù)
(oracle中所有字母都是以大寫字母存儲(chǔ)的)
字符函數(shù):轉(zhuǎn)換函數(shù),字符操縱函數(shù)?
?? 轉(zhuǎn)換函數(shù):lower('str') 將字符串中所有字母轉(zhuǎn)換為小寫
???select lower(ename) from emp;
?? upper('str') 將字符串中所有字母轉(zhuǎn)換為大寫
???select * from emp where ename='king';
?? initcap('SStr aaa') 將字符串首字母轉(zhuǎn)換為大寫,其它都轉(zhuǎn)換為小寫(Sstr Aaa)
?? 字符操縱函數(shù): concat('str1','str2') 用于將兩個(gè)字符串連接(str1str2)
???sumstr('str',1,3) 取子串函數(shù)(str)
???length('str') 取字符串長度(3) (注意:每個(gè)漢字的長度為1,等同一個(gè)字母)
???instr('str','t') 取某字符在某個(gè)字符串中首次出現(xiàn)的位置(2)
???lpad() 將字符串按某種模式顯示
??????? lpad(sal,10,'*')? 結(jié)果:******5000
????比如sal是5000它按10位輸出,多出的位用'*'代替
?
?(字符串函數(shù)中的字符串下標(biāo)是從1開始的,而不是0)
-------------------------
Number函數(shù):
?round 返回四舍五入值
??round(45.926,2)? 45.93?
??round(45.926,0)? 46
??round(45.926,-1)? 50
?trunc 截取小數(shù)
??trunc(45.926,2)? 45.92
??trunc(45.926)? 45
??trunc(45.926,-1) 40
?mod 求余運(yùn)算?
??mod(1600,300)? 100
---------------------------
日期型函數(shù):
?日期型函數(shù)格式:century,year,month,day,hours,minutes,seconds
?默認(rèn)日期格式:DD-MON-YY
?SYSDATE:返回當(dāng)前數(shù)據(jù)庫服務(wù)器的系統(tǒng)日期和時(shí)間
??select sysdate from dual;
???(dual是系統(tǒng)的名義表,是為使用某些函數(shù)使用的表,oracle中不允許查詢語句中
???沒有from關(guān)鍵字)
?MONTHS_BETWEEN 返回兩個(gè)日期之間月份的差值
??MONTHS_BETWEEN('01-SEP-95','11-JAN-94')?? 19.6774194
??select trunc(months_between(sysdate,'11-JAN-94')/12) from emp?
???求出表emp中的員工工作的年數(shù)
?ADD_MONTHS 在日期上加上月份數(shù)
??ADD_MONTHS('11-JAN-94',6)??? 11-JUL-94
?NEXT_DAY 指定日期的后一天
??('01-SEP-95','FRIDAY')? 得到的是下一個(gè)周五是幾號
?LAST_DAY 月份中最后一天
??LAST_DAY('01-SEP-95')?30-SEP-95
?ROUND 四舍五入日期
??round('25_7_95','month')對月進(jìn)行四舍五入 01-8-95
??round('25_7_95','year')對年進(jìn)行四舍五入?? 01-1-96
?TRUNC 截?cái)嗳掌?br />??trunc('25_7_95','month')? 01-7-95
??trunc('25_7_95','year')?? 01-1-95?
----------------------------------
轉(zhuǎn)換函數(shù)
?數(shù)據(jù)類型轉(zhuǎn)換:隱式數(shù)據(jù)類型轉(zhuǎn)換(隱式轉(zhuǎn)換函數(shù)可以不用轉(zhuǎn)換函數(shù),oracle可以自動(dòng)轉(zhuǎn)換),顯示數(shù)據(jù)類型轉(zhuǎn)換
oracle自動(dòng)轉(zhuǎn)換
?字符型(數(shù)字的字符) 加 數(shù)字型 自動(dòng)轉(zhuǎn)換成數(shù)字類型
?字符型 和 日期型 相互運(yùn)算 時(shí) 自動(dòng)轉(zhuǎn)換成日期型
?數(shù)值型 和 日期型 也可以自動(dòng)轉(zhuǎn)換成字符型
顯示數(shù)據(jù)類型轉(zhuǎn)換:number 轉(zhuǎn)換為 character 用to_char
?? character轉(zhuǎn)換為 number 用to_number
?? character轉(zhuǎn)換為date用to_date
?? date轉(zhuǎn)換為character用to_char
???select ename,to_char(hiredate,'YYYY-MM-DD') from emp;
???顯示員工受雇日期,轉(zhuǎn)換為字符輸出
YYYY 代表完整的年份
YEAR 年份
MM 兩位數(shù)月份
MONTH 月份的完整名稱
DY 每星期中某天的三個(gè)字符縮寫
DAY 天的完整名稱
select name, to_char(hiredate,'YYYY-MM-DD') from emp;
顯示員工表,員工的姓名,將員工的受雇日期轉(zhuǎn)換成字符型顯示(hiredate 員工的雇傭日期)
select to_char(sal) from emp;
將員工工資轉(zhuǎn)換成字符型
select 'this is '||name||' '||to_char(sal) from emp;(加上連接運(yùn)算符執(zhí)行上面的操作)
insert into emp(no,name,hiredate) values(9005,'Tss','1990-11-1');
這里的'1990-11-1'必須符合alter session set nls_date_format='YYYY-MM-DD'定義的日期模式
如果session中定義的日期模式和輸入的不一樣,可以用下面的日期轉(zhuǎn)換函數(shù)去做
insert into emp(no,name,hiredate) values(9006,'Ppss',to_date('1990-11-1','YYYY-MM-DD'));
-----------------------------------------------------------------------------------------------
NVL: 將NULL值轉(zhuǎn)換成一個(gè)實(shí)際的值(date,character,number型可以使用)
?? null值任何數(shù)據(jù)運(yùn)算時(shí)都得到一個(gè)null值,這里就可以用NVL
select name, sal, comm, (sal*12)+NVL(comm,0) as 年薪 from emp;
comm為員工的提成工資,因?yàn)樘岢煽赡苡?#xff0c;也可能沒有,用NUL這個(gè)函數(shù),如果沒提成它的默認(rèn)值為0
NVL(hiredate,'01-JAN-97') 如果雇傭日期為空,它的默認(rèn)值為
NVL(job,'no job yet') 如果工作職位為空,默認(rèn)值為'no job yet'
NVL(comm,0) 提成工資為空,默認(rèn)值為0
-------------------------------------------------------------------------------------------
Decode功能類似CASE or IF-THEN-ELSE語句
DECODE(col/expression, search1,result1
??????? [,search2,result2,...,]
??????? [default])
?col/expression 值或表達(dá)式
?search1 條件1 result1 結(jié)果1
?default 沒有符合條件時(shí)的默認(rèn)值
select job,sal,
?????? DECODE(job, 'ANALYSY', sal*1.1,
???? 'CLERK', sal*1.15,
???? 'MANAGER', sal*1.20,
??????????????? sal) 實(shí)發(fā)工資 from emp;?
(如果job為'ANALYSY',工資為實(shí)際工資再加上10%
如果job為'CLERK',工資為實(shí)際工資再加上15%
如果job為'MANAGER',工資為實(shí)際工資再加上20%
如果job都不符合,工資就為默認(rèn)值,實(shí)際工資sal
)
-----------------------------------------------------------------
函數(shù)嵌套
單行函數(shù)可以多重嵌套
select name NVL(to_char(mgr),'No Manager') from emp where mgr is null;
(mgr是上司,如果沒有上司,就返回'No Manager')
------------------------------------------------------------------
Sql plus命令
? save:將剛執(zhí)行的sql語句,保存到文件中
??? save 'd:/empsql.txt';
?
? clear screen 清屏
?
? get:讀取硬盤中的腳本文件,在plus Sql中顯示其中的內(nèi)容,并加載到緩存中,并沒有執(zhí)行,然后運(yùn)行run才能執(zhí)行
get 'd:/empsql.txt';
? @ 'd:/empsql.txt'; 這條語句不僅是把腳本文件讀出來,而且加到緩存中,并執(zhí)行
? connect system/oracle 連接到本機(jī)的system賬號,密碼是oracle
connect system/oracle@xxx 最后的xxx是oracle的服務(wù)器?
?
? 訪問另一個(gè)用戶的表(比如當(dāng)前登入的用戶是teacher)
?? grant select on student 將當(dāng)前數(shù)據(jù)庫的select語句功能,授權(quán)給student
?? 用student登入的另一個(gè)sqlPlus
???? select * from teacher.emp
???? student用戶訪問teacher用戶的emp表
?
? 如果命令前幾個(gè)寫母和其它命令沒有重復(fù)的,可以簡寫如:connect 可簡寫成conn,run-->r
? exit: 可直接退出sql plus
sqlPlus 中選‘選項(xiàng)’--‘環(huán)境變量’
里面有個(gè)autocommit默認(rèn)是關(guān),通過命令提交事務(wù);如果選擇開,每次的sql語句就都自動(dòng)提交了。?
總結(jié)
以上是生活随笔為你收集整理的oracle学习笔记(二)------函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts+spring的配置方式总结
- 下一篇: 在网上找了一些j2ee的视频教程,有需要