lower函數:
此函數將全部的大寫字母都可以變為小寫字母
SELECT lower('ABCDE') FROM dual ;
• dual表為一個虛擬表,以后介紹
此函數將全部的大寫字母都可以變為小寫字母
SELECT lower('ABCDE') FROM dual ;
• dual表為一個虛擬表,以后介紹
upper函數:將輸入的字符串變為大寫字母
SELECT upper('abcd') FROM dual ;
SELECT upper('abcd') FROM dual ;
例如:之前查詢的時候區分大小寫,所以此處如果輸入的是小寫字母,就可以通過upper函數進行轉換。
查詢雇員姓名內容為smith的全部員工。
SELECT * FROM emp WHERE ename=UPPER('smith') ;
查詢雇員姓名內容為smith的全部員工。
SELECT * FROM emp WHERE ename=UPPER('smith') ;
initcap函數:將每個字符串的首字母大寫
例如:要求將雇員表中的全部雇員信息的首字母大寫。
SELECT initcap(lower(ename)) FROM emp ;
函數可以進行嵌套。
例如:要求將雇員表中的全部雇員信息的首字母大寫。
SELECT initcap(lower(ename)) FROM emp ;
函數可以進行嵌套。
concat函數:字符串連接,可以連接兩個字符串
SELECT concat('hello',' world!!!') FROM dual ;
實際上使用“||”也可以完成兩個字符串的連接操作。
SELECT concat('hello',' world!!!') FROM dual ;
實際上使用“||”也可以完成兩個字符串的連接操作。
substr函數:字符串截取
截取的時候需要注意:要從那里開始截取,之后取多長的長度。
SELECT substr('hello',1,2) FROM dual ;
注意:substr函數的開始點是從1開始的。
截取的時候需要注意:要從那里開始截取,之后取多長的長度。
SELECT substr('hello',1,2) FROM dual ;
注意:substr函數的開始點是從1開始的。
length:取出字符串的長度,例如,取出每一個雇員的姓名的長度:
SELECT ename||' 姓名的長度為:'||length(ename) FROM emp ;
SELECT ename||' 姓名的長度為:'||length(ename) FROM emp ;
instr函數:查找在一個字符串中是否有指定的字符串,如果有,則返回其位置
SELECT instr('hello','x') FROM dual ;
• 如果有此字符串,則返回位置,如果沒有,則返回0。
SELECT instr('hello','x') FROM dual ;
• 如果有此字符串,則返回位置,如果沒有,則返回0。
replace函數:替換,可以將一個字符串中的指定字符串替換為其他內容:
SELECT replace('hello','l','x') FROM dual ;
SELECT replace('hello','l','x') FROM dual ;
trim函數:去掉左右空格的函數
SELECT trim(' hello ') FROM dual ;
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';
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 ;
•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 ;
在Oracle中可以通過查詢sysdate取得當前的日期:
• SELECT sysdate FROM dual ;
例如:計算10部門中的員工進入公司的日期數:
肯定使用當前日期-雇傭日期(hiredate) = 天數,天數/7為日期數。
SELECT ename,round((sysdate-hiredate)/7) from emp ;
肯定使用當前日期-雇傭日期(hiredate) = 天數,天數/7為日期數。
SELECT ename,round((sysdate-hiredate)/7) from emp ;
例如:
求出所有員工的受雇月數:months_between,使用當前日期與雇傭日期比較。
• SELECT ename,round(MONTHS_BETWEEN(sysdate,hiredate)) from emp ;
求出所有員工的受雇月數:months_between,使用當前日期與雇傭日期比較。
• SELECT ename,round(MONTHS_BETWEEN(sysdate,hiredate)) from emp ;
ADD_MONTHS:表示在日期的基礎上增加幾個月之后的日期:
求出,三個月之后的日期是那一天:
SELECT ADD_MONTHS(sysdate,3) FROM dual ;
求出,三個月之后的日期是那一天:
SELECT ADD_MONTHS(sysdate,3) FROM dual ;
NEXT_DAY:表示下一個這天(星期幾)
SELECT NEXT_DAY(sysdate,'星期一') FROM dual ;
SELECT NEXT_DAY(sysdate,'星期一') FROM dual ;
LAST_DAY:求出當前日期所在月的最后一天:
SELECT LAST_DAY(sysdate) FROM dual ;
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 ;
顯示受雇時間不滿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 ;
實際上要對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 ;
年-月-日: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,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 to_date('2007-4-7','YYYY-MM-DD') FROM dual ;
要求:
查詢出全部雇員的年薪(基本工資和傭金)。
SELECT empno,(sal+comm)*12 FROM emp ;
如果沒有獎金的雇員,則年薪也沒了,因為是null值,所以最后的計算結果仍然是null。
希望如果最后的值為null,則應該按0進行計算,此時就需要NVL函數的支持。
查詢出全部雇員的年薪(基本工資和傭金)。
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 ;SELECT empno,sal,NVL(comm,0) FROM emp ;
使用此函數修改上面的查詢:
SELECT empno,(sal+NVL(comm,0))*12 FROM emp ;
希望:
• 如果工作是CLERK:則顯示辦事員
• 如果工作是SALESMAN:則顯示為銷售人員
• 如果工作是MANAGER,則顯示為經理
SELECT empno,ename,DECODE(job,'CLERK','辦事員','SALESMAN','銷售人員','MANAGER','經理') FROM emp ;
轉自:http://lixinghua.blog.51cto.com/421838/91209