單行函數
一、單行數值函數
1、round:四舍五入。
格式:round(n1,[n2]):把n1四舍五入到n2位
2、trunc:截斷
3、mod:取余
二、單行字符函數
1、upper:把所有字母轉換成大寫(xiě)
Select upper('abcdafdafafdafda fdafdasf') From dual
2、lower:把所有字母轉換成大寫(xiě)
Select lower('SDfdDfaaffdasfdda fdafdasf') From dual
3、initcap:把首字母轉換成大寫(xiě),其余轉換成小寫(xiě)
Select initcap('SDfdDfaaffdasfdda fdafdasf') From dual
4、concat:字符串連接函數
5、length:取字符的長(cháng)度
6、substr:取子串
7、instr:取子串的位置
8、trim:去掉指定字符串兩端指定字符的。
9、replace(s1,s2,s3):把s1中的s2用s3替換。
三、單行日期函數
1、sysdate:取服務(wù)器當前時(shí)間
SELECT SYSDATE FROM dual
2、add_months:在指定的日期上加減多少個(gè)月
格式:add_months(d1,n)
SELECT hiredate,add_months(hiredate,6) FROM emp
SELECT add_months('31-8月-10',1) FROM dual
3、months_between:表示兩個(gè)日期之間間隔多少個(gè)月。
SELECT months_between(SYSDATE,hiredate) FROM emp
SELECT to_date(to_char(SYSDATE,'yyyy-mm-dd'),'yyyy-mm-dd')-hiredate FROM emp
4、last_day:取給定日期所在月份的最后一天的日期
格式:last_day(d1)
SELECT last_day(SYSDATE) FROM dual
SELECT last_day('01-2月-01') FROM dual
5、next_day:取給定日期下一個(gè)指定星期后的日期。
SELECT next_day(SYSDATE,'星期四') FROM dual
SELECT next_day('01-2月-01','星期四') FROM dual
SELECT * FROM nls_session_parameters//查看會(huì )話(huà)中參數。
6、extract:取給定日期中的年或者月或者日
格式:extract(YEAR|MONTH|DAY FROM d1)
SELECT extract(DAY FROM SYSDATE) FROM dual
SELECT extract(DAY FROM to_date('2001-01-01','yyyy-mm-dd')) FROM dual
7、round:對日期進(jìn)行四舍五入。
格式:round(d1,['fmt'])
SELECT round(SYSDATE) FROM dual//當第二個(gè)參數不寫(xiě)時(shí),默認四舍五入到日,看時(shí)間是否超過(guò)中午12:00.
SELECT round(SYSDATE,'MM') FROM dual
SELECT round(SYSDATE,'YY') FROM dual
8、trunc:對日期進(jìn)行截斷
格式:trunc(d1,['fmt'])
練習:
1、計算2000年1月1日到現在有多少月,多少周(四舍五入)。
SELECT round(months_between(SYSDATE,'01-1月-00')),round((SYSDATE - to_date('01-01-00','dd-mm-rr'))/7) FROM dual
2、將員工的參加工作日期按如下格式顯示:月份/年份
SELECT to_char(hiredate,'MM"月"/YY"年"') FROM emp
四、轉換函數
1、to_char:把日期或者數值型數據轉換成字符型
格式:to_char(d1|n1,['fmt'])
當參數1為日期型數據時(shí):fmt可以為
CC:表示世紀
RR:表示兩位年份
YY:表示兩位年份
YYYY:表示4位年份
MM:表示兩位月份
DD:表示兩位日期
HH12:表示12進(jìn)制的小時(shí)
HH24:表示24進(jìn)制的小時(shí)
MI:表示分鐘
SS:表示秒
當參數1為數值型數據時(shí):fmt可以為:
0:表示本身
9:表示任意一個(gè)數值
,:表示千位分隔符
.:表示小樹(shù)點(diǎn)
$:表示美元符號
L:表示本地貨幣符號
SELECT to_char(SYSDATE) FROM dual
SELECT to_char(SYSDATE,'DD/MM') FROM dual
SELECT to_char(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM dual
SELECT to_char(1234567.789,'L999,999,999,999.999') FROM dual
SELECT * FROM nls_session_parameters
ALTER SESSION SET NLS_CURRENCY='RMB' //修改會(huì )話(huà)的本地貨幣符號
2、to_date:把字符轉換成日期
格式:to_date(s1,'fmt')
fmt參見(jiàn)上面to_char函數說(shuō)明
SELECT to_date('20010101','rrmmddmi') FROM dual
SELECT to_date('20010101','rr') FROM dual
注意:要轉換的字符串一定要和格式碼相匹配
把字符串“2000年/1月-1日”轉換成日期
SELECT to_date('2000年/1月-1日','YYYY"年"/MM"月"-DD"日"') FROM dual
3、to_number:把字符轉換成數字
格式:to_number(s1,'fmt')
fmt參見(jiàn)上面to_char函數說(shuō)明
SELECT to_number('RMB123,456,576.89','L999,999,999.99') FROM dual
SELECT to_number('RMB123,456,5761.89','L999,999,99999.99') FROM dual
注意:當格式碼中的格式比要轉換的長(cháng)或短時(shí),都轉換不成功。
五、通用函數
1、空值處理函數
nvl(參數1,參數2):如果參數1不為null,則函數結果為參數1,否則結果為參數2
SELECT nvl('a','b') FROM dual
SELECT nvl(NULL,'b') FROM dual
//練習:求每個(gè)員工的年收入,年收入等于12*(工資+津貼)
SELECT 12*(sal+nvl(comm,0)) FROM emp
//查詢(xún)每個(gè)員工的經(jīng)理編號,對于沒(méi)有經(jīng)理的員工顯示"無(wú)經(jīng)理"
SELECT nvl(mgr,'無(wú)經(jīng)理') FROM emp
注意:nvl函數要求參數1和參數2必須是相同數據類(lèi)型的。
SELECT nvl(to_char(mgr),'無(wú)經(jīng)理') FROM emp
nvl2(參數1,參數2,參數3):判斷參數1是否為null,如果不是null,返回參數2,否則參數3
//練習:求每個(gè)員工的年收入,年收入等于12*(工資+津貼)
SELECT 12*(sal+nvl2(comm,comm,0)) FROM emp
//查詢(xún)每個(gè)員工的經(jīng)理編號,對于沒(méi)有經(jīng)理的員工顯示"無(wú)經(jīng)理"
SELECT nvl2(mgr,to_char(mgr),'無(wú)經(jīng)理') FROM emp
注意:nvl2函數要求參數2和參數3必須是相同數據類(lèi)型的。
nullif(參數1,參數2):判斷參數1和參數2是否相等,如果相等,返回null,否則返回參數1
SELECT nullif('b','b') FROM dual
COALESCE(參數1,參數2,參數3,.....):返回第一個(gè)不為null的參數
SELECT COALESCE(NULL,NULL,1,2) FROM dual
case表達式
語(yǔ)法結構
CASE 條件表達式
END
//查詢(xún)員工的姓名,津貼,300元顯示低,500元顯示還行,1400元顯示高,其他的顯示工作不認真,繼續努力。
SELECT ename,comm, CASE
WHEN 300 THEN '低'
WHEN 500 THEN '還行'
WHEN 1400 THEN '高'
ELSE '工作不認真,繼續努力。'
END
FROM emp
decode(條件表達式,值1,結果1,值2,結果2,.....值n,結果n,結果n+1) :
判斷條件表達式1和哪個(gè)值相匹配,則返回對應的結果,如果沒(méi)有匹配的返回結果n+1
//查詢(xún)員工的姓名,津貼,300元顯示低,500元顯示還行,1400元顯示高,其他的顯示工作不認真,繼續努力。
SELECT ename,comm,decode(comm,300,'低',500 ,'還行',1400,'高','工作不認真,繼續努力。') FROM emp
//練習,計算每個(gè)員工的個(gè)人所得稅。
計算方式:
工資在0-1000元以下的不交稅
在1000-2000的交10%
2000-3000的交15%
3000以上的交20%
trunc(0-1) 0
1.-2
2.-3
SELECT ename,sal,sal*decode(trunc(sal/1000),0,0,1,0.1,2,0.15,0.2) FROM emp
聯(lián)系客服