第4章SQL語言高級(jí)課件.ppt
Oracle4g 數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009第4章 SQL語言高級(jí) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009本章內(nèi)容p多列分組查詢p累計(jì)統(tǒng)計(jì)查詢p層次查詢p多表插入pSQL函數(shù) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.1 多列分組統(tǒng)計(jì)pROLLUP pCUBEpGROUPINGpGROUPING SETS Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p使用ROLLUP選項(xiàng),除了生成基于所有指定列的分組統(tǒng)計(jì)外,還對(duì)指定的分組列從左開始的每個(gè)子集進(jìn)行統(tǒng)計(jì)。例如,GROUP BY ROLLUP(A,B,C)形成的統(tǒng)計(jì)包括:pGROUP BY ():不基于任何列的整個(gè)查詢結(jié)果的統(tǒng)計(jì)。pGROUP BY A:基于A列的分組統(tǒng)計(jì)。 pGROUP BY A,B:基于A、B兩列的分組統(tǒng)計(jì)。pGROUP BY A,B,C:基于A、B、C三列的分組統(tǒng)計(jì)。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 n SELECT department_id,job_id,avg(salary) FROM employees WHERE department_id IN(4,20,30) GROUP BY ROLLUP(department_id,job_id) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p使用CUBE選項(xiàng),除了生成基于所有指定列的分組統(tǒng)計(jì)外,還對(duì)指定分組列的所有子集進(jìn)行統(tǒng)計(jì)。例如,GROUP BY CUBE(A,B,C)形成的統(tǒng)計(jì)包括:p GROUP BY ():不基于任何列的整個(gè)查詢結(jié)果的統(tǒng)計(jì)。p GROUP BY A:基于A列的分組統(tǒng)計(jì)。p GROUP BY B:基于B列的分組統(tǒng)計(jì)。 p GROUP BY C:基于C列的分組統(tǒng)計(jì)。p GROUP BY A,B:基于A、B兩列的分組統(tǒng)計(jì)。p GROUP BY A,C:基于A、C兩列的分組統(tǒng)計(jì)。p GROUP BY B,C:基于B、C兩列的分組統(tǒng)計(jì)。p GROUP BY A,B,C:基于A、B、C三列的分組統(tǒng)計(jì)。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 n SELECT department_id,job_id,avg(salary) FROM employees WHERE department_id IN(4,20,30) GROUP BY CUBE(department_id,job_id); Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p為了了解每個(gè)統(tǒng)計(jì)結(jié)果是基于哪些列統(tǒng)計(jì)而來的,可以使用GROUPING函數(shù),函數(shù)返回值為1時(shí),表示該列沒有參與統(tǒng)計(jì);函數(shù)返回值為0時(shí),表示該列參與了統(tǒng)計(jì)。n SQLSELECT department_id,job_id,avg(salary), n grouping(department_id) did,grouping(job_id) jidn FROM hr.employees WHERE department_id IN(4,20,30)n GROUP BY CUBE(department_id,job_id); Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p合并分組查詢n使用GROUPING SETS可以將幾個(gè)單獨(dú)的分組查詢合并成一個(gè)分組查詢 n SELECT department_id,job_id,avg(salary) n FROM employees n GROUP BY GROUPING n SETS(department_id,job_id); Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p GROUPING SETS語句的作用就是使用一個(gè)語句得到多個(gè)分組統(tǒng)計(jì)的結(jié)果集。要注意嵌套列與非嵌套列的區(qū)別。嵌套列與單個(gè)GROUP BY語句作用相同;非嵌套列相當(dāng)于將多個(gè)單獨(dú)的GROUP BY語句查詢結(jié)果,采用UNION ALL方式的合并起來。例如: n GROUP BY GROUPING SETS(A,B,C):等價(jià)于GROUP BY A,B,C。n GROUP BY GROUPING SETS(A,B,C):等價(jià)于GROUP BY A UNION ALL GROUP BY B UNION ALL GROUP BY C。n GROUP BY GROUPING SETS(A,(B,C):等價(jià)于GROUP BY A UNION ALL GROUP BY B,C。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.2 累計(jì)查詢p在執(zhí)行統(tǒng)計(jì)查詢時(shí),可以將聚集函數(shù)與OVER函數(shù)相結(jié)合,進(jìn)行總體累計(jì)統(tǒng)計(jì)查詢或分組累計(jì)統(tǒng)計(jì)查詢p總體累計(jì)統(tǒng)計(jì)p分組累計(jì)統(tǒng)計(jì) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p總體累計(jì)統(tǒng)計(jì)的每一個(gè)統(tǒng)計(jì)結(jié)果都是針對(duì)之前的所有記錄進(jìn)行的,在OVER函數(shù)中使用ORDER BY語句指定統(tǒng)計(jì)的順序,如果不指定ORDER BY語句,則不進(jìn)行累計(jì)統(tǒng)計(jì)。n SELECT employee_id, n sum(salary) OVER(ORDER BY employee_id) sal,count(*) OVER(ORDER BY employee_id) num,sum(salary) over() total_sal,count(*) over() total_num FROM hr.employees; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p如果在進(jìn)行累計(jì)統(tǒng)計(jì)時(shí),需要按組進(jìn)行,則需要使用PARTITION子句指定累計(jì)統(tǒng)計(jì)的分組列。n SQLSELECT department_id,employee_id, sum(salary) OVER(n PARTITION BY department_id ORDER BY employee_id) sal, n count(*) OVER(PARTITION BY department_id ORDER BY employee_id) n num FROM hr.employees; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.3 層次查詢p層次查詢(hierarchical_query),又稱樹形查詢,能夠?qū)⒁粋€(gè)表中的數(shù)據(jù)按照記錄之間的聯(lián)系以樹狀結(jié)構(gòu)的形式顯示出來。 p層次查詢的語法為n SELECT LEVEL, column,expression.n FROM table n WHERE conditionn START WITH column = valuen CONNECT BY condition; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p參數(shù)說明,n LEVEL:偽列,表示記錄的層次;n WHERE:記錄(節(jié)點(diǎn))選擇條件;n START WITH:層次查詢的起始記錄(起始節(jié)點(diǎn))n CONNECT BY:指定父記錄與子記錄之間的關(guān)系及 分支選擇條件。必須使用PRIOR引用父記錄,形式為 PRIOR column1=column2或 column1=PRIOR column2。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p利用分級(jí)查詢顯示emp表中員工與領(lǐng)導(dǎo)之間的關(guān)系(從高到低)。 p SELECT empno,ename,mgr FROM empp START WITH empno=7839p CONNECT BY PRIOR empno=mgr; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 p EMPNO ENAME MGRp -p 7839 KINGp 7566 JONES 7839p 7788 SCOTT 7566p 7876 ADAMS 7788 p 7902 FORD 7566p 7369 SMITH 7902p 7698 BLAKE 7839p 7499 ALLEN 7698p 7521 WARD 7698p 7654 MARTIN 7698p 7844 TURNER 7698p 7900 JAMES 7698p 7782 CLARK 7839p 7934 MILLER 7782 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p查詢顯示工資大于2000且最高領(lǐng)導(dǎo)為JONES的員工信息。p SELECT empno,ename,mgr,sal FROM emp p WHERE sal2000p START WITH ename=JONESp CONNECT BY PRIOR empno=mgr; p EMPNO ENAME MGR SALp -p 7566 JONES 7839 3075p 7788 SCOTT 7566 340p 7902 FORD 7566 340 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p查詢員工信息,不包括以7698號(hào)員工為最高領(lǐng)導(dǎo)的員工p SELECT empno,ename,mgr FROM empp START WITH empno=7839p CONNECT BY PRIOR empno=mgr AND empno!=7698;p EMPNO ENAME MGR p -p 7839 KINGp 7566 JONES 7839p 7788 SCOTT 7566p 7876 ADAMS 7788p 7902 FORD 7566p 7369 SMITH 7902p 7782 CLARK 7839p 7934 MILLER 7782 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT lpad( ,5*LEVEL-1)|empno EMPNO,p lpad( ,5*LEVEL-1)|ename ENAME p FROM emp p START WITH empno=7839 p CONNECT BY PRIOR empno=mgr; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.4向多個(gè)表中插入數(shù)據(jù) p在Oracle 4g中,可以使用INSERT語句同時(shí)向多個(gè)表中插入數(shù)據(jù)。p根據(jù)數(shù)據(jù)插入的條件不同,分為:n無條件插入:將數(shù)據(jù)插入所有指定的表中n有條件插入:將數(shù)據(jù)插入符合條件的表中。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p無條件多表插入的基本語法為n INSERT ALL n INTO table1 VALUES(column1,column2,)n INTO table2 VALUES(column1,column2,)nn subquery;p利用無條件多表插入,將emp表中工資高于2000的員工信息查詢后分別插入emp_sal和emp_mgr表。 n INSERT ALLn INTO emp_sal VALUES(empno,hiredate,sal)n INTO emp_mgr VALUES(empno,mgr,sal)n SELECT empno,hiredate,mgr,sal FROM emp n WHERE sal2000; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p有條件多表插入語法為n INSERT ALL|FIRST n WHEN condition1 THEN INTO table1(column1,) n WHEN condition2 THEN INTO table2(column1,)n n ELSE INTO tablen(column1,)n subquery;p參數(shù)說明n ALL:表示一條記錄可以同時(shí)插入多個(gè)滿足條件的表中;n FIRST:表示一條記錄只插入第一個(gè)滿足條件的表中。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p將emp表中的員工信息按不同部門號(hào)分別復(fù)制到emp4,emp20,emp30和emp_other表中。 n INSERT FIRSTn WHEN deptno=4 THEN INTO emp4n WHEN deptno=20 THEN INTO emp20 n WHEN deptno=30 THEN INTO emp30n ELSE INTO emp_othern SELECT * FROM emp; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p將emp表中員工信息按照不同部門號(hào)分別復(fù)制到emp4,emp20,emp30和emp_other表中。同時(shí),將工資低于2000的員工信息復(fù)制到lowsal表中,將工資高于4000的員工信息復(fù)制到highsal表中,將工資在20003000之間的員工信息復(fù)制到middlesal表中。n INSERT ALL n WHEN deptno=4 THEN INTO emp4n WHEN deptno=20 THEN INTO emp20n WHEN deptno=30 THEN INTO emp30n WHEN deptno=40 THEN INTO emp_othern WHEN sal4000 THEN INTO highsaln ELSE INTO middlesal n SELECT * FROM emp; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p INSERT ALLp WHEN SAL 4000 THENp INTO sal_history VALUES(EMPID,HIREDATE,SAL)p WHEN MGR 200 THENp INTO mgr_history VALUES(EMPID,MGR,SAL) p SELECT employee_id EMPID,hire_date HIREDATE, p salary SAL, manager_id MGR p FROM employeesp WHERE employee_id 200; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p多表插入的應(yīng)用n利用多表插入技術(shù)可以實(shí)現(xiàn)不同數(shù)據(jù)源之間的數(shù)據(jù)轉(zhuǎn)換,可以將非關(guān)系數(shù)據(jù)庫的一條記錄轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫中的多條記錄。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p將SALES_SOURCE_DATA表中的記錄轉(zhuǎn)換為SALES_INFO表中的記錄。n CREATE TABLE sale_source_data( emp_id NUMBER(6), week_id NUMBER(2), sale_MON NUMBER(8,2), sale_TUE NUMBER(8,2), sale_WED NUMBER(8,2), sale_THUR NUMBER(8,2), sale_FRI NUMBER(8,2); n INSERT INTO sale_source_data VALUES(7844,1,40,200,300,400,500); Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p CREATE TABLE sale_info( emp_id NUMBER(6), week NUMBER(2), sale NUMBER(8,2);p INSERT ALL INTO sale_info VALUES (emp_id,week_id,sale_MON) INTO sale_info VALUES (emp_id,week_id,sale_TUE) INTO sale_info VALUES (emp_id,week_id,sale_WED) INTO sale_info VALUES (emp_id,week_id,sale_THUR) INTO sale_info VALUES (emp_id,week_id, sale_FRI) SELECT * FROM sale_source_data; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.5 SQL函數(shù)pSQL函數(shù)分類p數(shù)值函數(shù)p字符函數(shù)p日期函數(shù)p轉(zhuǎn)換函數(shù)p其他函數(shù) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.5.1 SQL函數(shù)分類p根據(jù)參數(shù)作用行數(shù)的不同,可以分為:n單行函數(shù)n多行函數(shù)p根據(jù)參數(shù)類型不同,可以分為:n數(shù)值函數(shù)n字符函數(shù) n日期函數(shù)n轉(zhuǎn)換函數(shù)n聚集函數(shù) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.5.2 數(shù)值函數(shù)函數(shù)返回值A(chǔ)BS(n)返回n的絕對(duì)值CEIL(n)返回大于或等于n的最小整數(shù)EXP(n)返回e的n次冪FLOOR(n)返回小于或等于n的最大整數(shù)LN(n)返回以E為底的n的對(duì)數(shù)LOG(m,n)返回以m為底的n的對(duì)數(shù) MOD(m,n)返回m除以n的余數(shù)PI( )返回常數(shù)3.1515926535897931POWER(m,n)返回m的n次方 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009ROUND(m,n)對(duì)m進(jìn)行四舍五入(n大于0時(shí),將m四舍五入到小數(shù)點(diǎn)右邊n位,n等于零時(shí),表示對(duì)m進(jìn)行取整,n小于0時(shí),則小數(shù)點(diǎn)左邊的數(shù)字位置被圓整。SIGN(n)判斷n的正負(fù)(n大于0返回,n等于0返回0,n小于0返回-1SQRT(n)返回n的平方根SQUARE(n)返回n的平方 TRUNC(m,n)對(duì)m進(jìn)行截?cái)嗖僮鳎╪截?cái)嗟叫?shù)點(diǎn)后第n位,如果n未給出,則系統(tǒng)默認(rèn)為0,n也可以為負(fù)數(shù),表示小數(shù)點(diǎn)左邊的數(shù)字位置被刪除成零。 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT salary/22 daysal,round(salary/22,1),p trunc(salary/22,1), round(salary/22,-1),trunc(salary/22,-1) p FROM employees;p SELECT salary,width_bucket(salary,400,4000,4) p FROM employees WHERE department_id=30; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT floor(3.5),ceil(3.5),mod(5,3), remainder(5,3), mod(4,3),remainder(4,3) FROM dual;p FLOOR(3.5) CEIL(3.5) MOD(5,3) REMAINDER(5,3) MOD(4,3) REMAINDER(4,3) - 3 4 2 -1 1 1 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.5.3 字符函數(shù)函數(shù)返回值A(chǔ)SCII(char)字符串首字符的ASC碼值CHR(n) ASC碼值為n的字符CONCAT把兩個(gè)列值拼接起來;“|”操作符更通用INITCAP(char)將字符串中每個(gè)單詞的首字母大寫INSTR(char1,char2,a,b)INSTRB(char1,char2,a,b)返回指定字符的位置 LENGTH(char)LENGTHB(char)計(jì)算字符串的長度SUBSTR(char,m,n)求子串。column中從起始位置m開始長度為n的子串Replace(str1,str2,str3) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009LOWER(char)、UPPER(char)將字符串中所有的大寫字母變?yōu)樾?大)寫LPAD(char1,n,char2)從左側(cè)用字符串char2補(bǔ)齊字符串char1至長度n(右對(duì)齊)RPAD(char1,n,char2)從右側(cè)用char2補(bǔ)齊char1至長度n.LTRIM(char,SET)把char中最左側(cè)的若干個(gè)字符去掉,以使其首字符不在SET中RTRIM(char,SET)把char中最右側(cè)的若干個(gè)字符去掉,以使其 尾字符不在SET中TRIM(leading|trailing|both FROM string) Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT lpad(abc,5, #) leftpad,rpad(abc,5, #) rightpad, ltrim(abcd, a) lefttrim,rtrim(abcde, e) righttrim, substr(abcd,2,3) substring FROM dual; p LEFTPAD RIGHTPAD LEFTTRIM RIGHTTRIM SUBSTRING - - - - - #abc abc# bcd abcd bcd Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT employee_id,p concat(concat(first_name, ),last_name) employee_name p FROM employees p WHERE employee_id=48; p SELECT instr(abcde,b) position,replace(oracle9i,9i,4g) p newstring,soundex(hello) soundp FROM dual;p POSITION NEWSTRING SOUND - 2 oracle4g H400 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.5.4 日期函數(shù)p日期函數(shù)是指對(duì)日期進(jìn)行處理的函數(shù),函數(shù)輸入為DATE或TIMESTAMP類型的數(shù)據(jù),輸出為DATE類型的數(shù)據(jù)(除MONTH_BETWEEN函數(shù)返回整數(shù)以外)。p Oracle數(shù)據(jù)庫中日期的默認(rèn)格式為DD-MON-YY??梢酝ㄟ^設(shè)置NLS_DATE_FORMAT參數(shù)設(shè)置當(dāng)前會(huì)話的日期格式,通過NLS_LANGUAGE參數(shù)設(shè)置表示日期的字符集。例如: n ALTER SESSION SET NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS;n ALTER SESSION SET NLS_LANGUAGE=AMERICAN; Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009函數(shù)返回值A(chǔ)DD_MONTHS(d,n)返回日期 d 添加 n 個(gè)月的日期CURRENT_DATE返回系統(tǒng)當(dāng)前日期和時(shí)間CURRENT_TIMESTAMP(p) 返回系統(tǒng)當(dāng)前時(shí)間戳EXTRACT(depart FROM d) 返回d中depart對(duì)應(yīng)部分的內(nèi)容 LAST_DAY(d)返回d所在月份最后一天的日期LOCALTIMESTAMP(P)返回本地時(shí)間戳 LOCALTIMESTAMP(p)返回當(dāng)前會(huì)話時(shí)區(qū)所對(duì)應(yīng)的日期時(shí)間MONTHS_BETWEEN(d1,d2)日期d1和d2之間相隔的月數(shù)NEXT_DAY(d,day) d后第一周指定的日期。ROUND(d,format)日期d按format格式進(jìn)行舍入 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009SYSDATE返回系統(tǒng)當(dāng)前日期和時(shí)間。SYSTIMESTAMP 返回系統(tǒng)當(dāng)前時(shí)間戳。TRUNC(d,format)返回截尾到由format指定單位的日期TO_CHAR (d,,fmt, nlsparam)將日期時(shí)間d轉(zhuǎn)換為符合特定格式的字符串TO_TIMESTAMP(char,fmt, nlsparam)將符合特定日期和時(shí)間格式的字符串轉(zhuǎn)換為TIMESTAMP類型值 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT SYSDATE,add_months(sysdate,2) ADDM, next_day(sysdate,2) NEXTD,Last_day(sysdate) LASTD, round(sysdate, MONTH) ROUNDM, trunc(sysdate, MONTH ) TRUNCM FROM DUAL; p SYSDATE ADDM NEXTD LASTD ROUNDM TRUNCM - - - - - - 2009-03-27 2009-05-27 2009-03-30 2009-03-31 2009-04-01 2009-03-01 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT extract(YEAR FROM SYSDATE) YEAR, extract(DAY FROM SYSDATE) DAY , extract(HOUR FROM SYSTIMESTAMP) HOUR,extract(MINUTE FROM SYSTIMESTAMP) MINUTE FROM DUAL; p YEAR DAY HOUR MINUTE - 2009 28 14 44 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT dbtimezone,localtimestamp, numtoyminterval(20,MONTH) DAY_SECOND FROM dual; p DBTIMEZONE LOCALTIMESTAMP YEAR_MONTH - +00:00 28-3月-09 4.56.04.882000 下午 +000000001-08 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.5.5 轉(zhuǎn)換函數(shù)函 數(shù)說 明CAST(expr AS datatype)將表達(dá)式expr按指定的類型返回CHARTOROWID(char)將字符串換轉(zhuǎn)換為ROWID類型HEXTORAW(char)將十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)RAWTOHEX(raw)將二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)ROWIDTOCHAR(rowid)將ROWID類型轉(zhuǎn)換為字符類型TO_CHAR(d,fmt)將日期d按指定格式轉(zhuǎn)換為字符串 TO_CHAR(num,fmt)將數(shù)值按指定格式轉(zhuǎn)換為字符串TO_DATE(char,fmt)將字符串按指定格式轉(zhuǎn)換為日期TO_CLOB(char)將字符串轉(zhuǎn)換為CLOB類型數(shù)據(jù)TO_NUMBER(char,fmt)將字符串按指定格式轉(zhuǎn)換為數(shù)值 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT to_date(09-3-28, yy-mm-dd) CHARTODATE, to_char(sysdate, yyyy-mm-dd hh:mi:ss) DATETOCHAR, to_char(123, $9999.99) NUMTOCHAR, to_number($1234.56,$9999.99) CHARTONUMBER FROM DUAL; p CHARTODATE DATETOCHAR NUMTOCHAR CHARTONUMBER - 28-3月 -09 2009-03-29 12:53:54 $123.00 1234.56 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT timestamp_to_scn(systimestamp) SCN, scn_to_timestamp(2790424) TIMESTAMP FROM dual; p SCN TIMESTAMP - 2790484 29-3月 -09 12.58.20.000000000 上午 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009 4.5.6 其他函數(shù)函 數(shù)說 明GREATEST(expr1,expr2,)返回幾個(gè)表達(dá)式中的最大值LEAST(expr1,expr2,)返回幾個(gè)表達(dá)式中的最小值NULLIF(expr1,expr2)如果expr1與expr2相等,則函數(shù)返回NULL,否則返回exp1NVL(expr1,expr2)如果expr1為NULL,則返回expr2,否則返回expr1NVL2(expr1,expr2,exp3)如果expr1為NULL,則返回expr3,否則返回expr2 UID返回當(dāng)前會(huì)話的用戶IDUSER返回當(dāng)前會(huì)話的數(shù)據(jù)庫用戶名DECODE(base_expr,expr1,value1,expr2,value2,default)如果base_expr=exprn,則返回valuen的值 Oracle 4g數(shù) 據(jù) 庫 基 礎(chǔ) 教 程2009p SELECT employee_id, p salary+nvl(commission_pct*salary,0) totalsalaryp FROM .employees p WHERE department_id=30;