lower函數:
此函數将全部的大寫字母都可以變為小寫字母
SELECT lower('ABCDE') FROM dual ;
• dual表為一個虛拟表,以後介紹
upper函數:将輸入的字元串變為大寫字母
SELECT upper('abcd') FROM dual ;
例如:之前查詢的時候區分大小寫,是以此處如果輸入的是小寫字母,就可以通過upper函數進行轉換。
查詢雇員姓名内容為smith的全部員工。
SELECT * FROM emp WHERE ename=UPPER('smith') ;
initcap函數:将每個字元串的首字母大寫
例如:要求将雇員表中的全部雇員資訊的首字母大寫。
SELECT initcap(lower(ename)) FROM emp ;
函數可以進行嵌套。
concat函數:字元串連接配接,可以連接配接兩個字元串
SELECT concat('hello',' world!!!') FROM dual ;
實際上使用“||”也可以完成兩個字元串的連接配接操作。
substr函數:字元串截取
截取的時候需要注意:要從那裡開始截取,之後取多長的長度。
SELECT substr('hello',1,2) FROM dual ;
注意:substr函數的開始點是從1開始的。
length:取出字元串的長度,例如,取出每一個雇員的姓名的長度:
SELECT ename||' 姓名的長度為:'||length(ename) FROM emp ;
instr函數:查找在一個字元串中是否有指定的字元串,如果有,則傳回其位置
SELECT instr('hello','x') FROM dual ;
• 如果有此字元串,則傳回位置,如果沒有,則傳回0。
replace函數:替換,可以将一個字元串中的指定字元串替換為其他内容:
SELECT replace('hello','l','x') FROM dual ;
trim函數:去掉左右空格的函數
SELECT trim(' hello ') FROM dual ;
查詢:
1、 檢索姓名最後一個字母為N的雇員
• SELECT * FROM emp WHERE substr(ename,-1,1)='N';
2、 檢索職務為“SALE”的全部員工資訊
• SELECT * FROM emp WHERE substr(job,1,4)='SALE';
ROUND表示四舍五入
•SELECT ROUND(34.56,-1) FROM dual ;
TRUNC函數:表示截取函數
• SELECT TRUNC(34.56,-2) FROM dual ;
MOD函數:取餘數
•SELECT MOD(10,3) FROM dual ;
取得目前日期:
在Oracle中可以通過查詢sysdate取得目前的日期:
• SELECT sysdate FROM dual ;
例如:計算10部門中的員工進入公司的日期數:
肯定使用目前日期-雇傭日期(hiredate) = 天數,天數/7為日期數。
SELECT ename,round((sysdate-hiredate)/7) from emp ;
例如:
求出所有員工的受雇月數:months_between,使用目前日期與雇傭日期比較。
• SELECT ename,round(MONTHS_BETWEEN(sysdate,hiredate)) from emp ;
ADD_MONTHS:表示在日期的基礎上增加幾個月之後的日期:
求出,三個月之後的日期是那一天:
SELECT ADD_MONTHS(sysdate,3) FROM dual ;
NEXT_DAY:表示下一個這天(星期幾)
SELECT NEXT_DAY(sysdate,'星期一') FROM dual ;
LAST_DAY:求出目前日期所在月的最後一天:
SELECT LAST_DAY(sysdate) FROM dual ;
顯示受雇時間不滿320-個月的雇員的編号、受雇日期、受雇的月數、滿六個月的複審日期、受雇後的第一個星期五以及受雇當月的最後一天
求出雇傭月數大于320的雇員資訊:
SELECT * FROM emp WHERE MONTHS_BETWEEN(sysdate,hiredate)>320 ;
綜合:
SELECT empno 雇員編号,hiredate 雇傭日期,
round(MONTHS_BETWEEN(sysdate,hiredate)) 雇傭月數 ,
add_months(hiredate,6) 複審日期,next_day(hiredate,'星期五') 受雇後到第一個星期五,
last_day(hiredate) 最後一天
FROM emp WHERE MONTHS_BETWEEN(sysdate,hiredate)>320 ;
例如:現在要求取出全部員工受雇的年份
實際上要對hiredate中的内容進行分離,取出年份。
SELECT empno,ename,TO_CHAR(hiredate,'YYYY') FROM emp ;
取出雇傭的月份和日:
SELECT empno,ename,TO_CHAR(hiredate,'YYYY') 年,
TO_CHAR(hiredate,'MM') 月,TO_CHAR(hiredate,'DD') 月 FROM emp ;
也可以通過此函數把顯示的日期的格式進行修正:
年-月-日:2008-4-7
SELECT empno,ename,TO_CHAR(hiredate,'YYYY-MM-DD') FROM emp ;
正常情況下的日期,如果是月應該是兩位,如果現在是2月,則會顯示02月,如果現在不希望顯示出前導0,則可以加入一個fm
SELECT empno,ename,TO_CHAR(hiredate,'fmYYYY-MM-DD') FROM emp ;
可以将一個數值按照指定的格式輸出。
SELECT empno,sal FROM emp ; 此時不是很明确的知道查詢出的工資,而且工資的位數也不标準。
使用to_char完成:SELECT empno,to_char(sal,'L99,999') FROM emp ;
to_date函數:
可以将一個字元串變為一個日期類型。
SELECT to_date('2007-4-7','YYYY-MM-DD') FROM dual ;
要求:
查詢出全部雇員的年薪(基本工資和傭金)。
SELECT empno,(sal+comm)*12 FROM emp ;
如果沒有獎金的雇員,則年薪也沒了,因為是null值,是以最後的計算結果仍然是null。
希望如果最後的值為null,則應該按0進行計算,此時就需要NVL函數的支援。
Nvl函數可以将空值變為一個特定的數值
SELECT empno,sal,NVL(comm,0) FROM emp ;
使用此函數修改上面的查詢:
SELECT empno,(sal+NVL(comm,0))*12 FROM emp ;
select empno,ename,job from emp ;
希望:
• 如果工作是CLERK:則顯示辦事員
• 如果工作是SALESMAN:則顯示為銷售人員
• 如果工作是MANAGER,則顯示為經理
SELECT empno,ename,DECODE(job,'CLERK','辦事員','SALESMAN','銷售人員','MANAGER','經理') FROM emp ;
本文轉自 李興華 51CTO部落格,原文連結:http://blog.51cto.com/lixinghua/91209,如需轉載請自行聯系原作者