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 ;

轉自:http://lixinghua.blog.51cto.com/421838/91209