總是覺得自己寫的oracle筆記特別垃圾,可是有說不清該怎麼去寫,有建議的告訴一聲啊,本人在此謝過啦!Sql函數分為兩種:單行函數、多行函數單行函數:操作資料對象接受參數返回一個結果只對一行進行變換每行返回一個結果可以轉換資料類型可以嵌套參數可以是一列或一個值單行函數可以分為:字元函數: 大小寫控制函數【LOWER、UPPER、 INITCAP】 SQL>select lower('REDY') from dual;LOWER(' ------- red SQL> select upper('red') from dual;UPPER(' ------- REDY SQL> select initcap('red') from dual;INITCAP ------- Red 字元控制函數【CONCAT、SUBSTR、LENGTH、INSTR、LPAD|RPAD、TRIM、REPLACE】 函數 結果 CONCAT('Hello', 'World') HelloWorldSUBSTR('HelloWorld',1,5) HelloLENGTH('HelloWorld') 10INSTR('HelloWorld', 'W') 6(W出現的位置)LPAD(salary,10,'*') *****24000RPAD(salary, 10, '*') 24000*****TRIM('H' FROM'HelloWorld') elloWorld(去除的是首字母的H) 數字函數 ROUND 四捨五入SQL> select round(45.3213,2) from dual;ROUND(45.3213,2) ---------------- 45.32 TRUNC 截斷SQL> select trunc(45.926,2) from dual;TRUNC(45.926,2) --------------- 45.92 MOD 求餘SQL> select mod(1600,300) from dual;MOD(1600,300) ------------- 100註:DUAL 是一個‘偽表’,可以用來測試函數和運算式日期:Oracle 中的日期型資料實際含有兩個值: 日期和時間。預設的日期格式是 DD-MON-RR. 函數SYSDATE 返回:日期時間日期的數學運算:l 在日期上加上或減去一個數字結果仍為日期。l 兩個日期相減返回日期之間相差的天數。l 可以用數字除24來向日期中加上或減去小時。Months_between 兩個日期相差的月數SQL> selectmonths_between('1-10月-90','2-4月-90') from dual;MONTHS_BETWEEN('1-10月-90','2-4月-90') -------------------------------------- 5.96774194Add_months 向指定日期中加上若干月數SQL> selectadd_months(sysdate,2) from dual;ADD_MONTHS(SYS -------------- 13-5月 -12Next_day 指定日期的下一個日期SQL> selectnext_day(sysdate,'星期二') from dual;NEXT_DAY(SYSDA -------------- 20-3月 -12Last_day 本月的最後一個日期SQL> selectlast_day(sysdate) from dual;LAST_DAY(SYSDA -------------- 31-3月 -12Round 日期四捨五入SQL> selectround(sysdate) from dual;ROUND(SYSDATE) -------------- 13-3月 -12Trunk 日期截斷SQL> selecttrunc(sysdate,'MONTH') from dual;TRUNC(SYSDATE, -------------- 01-3月 -12 轉換函式:隱形:Oracle自動完成的轉換顯示:TO_CHAR 函數對日期的轉換格式:l 必須包含在單引號中而且大小寫敏感。l 可以包含任意的有效日期格式。l 日期之間用逗號隔開。SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;TO_CHAR(SY ---------- 2012-03-13 TO_CHAR 函數對數位轉換下面是在TO_CHAR 函數中經常使用的幾種格式:9----------數字0-----------零$-----------美元符L---------本地貨幣符號.--------小數點,--------千位符SQL> select to_char('2430', '$99,999.00') from dual;TO_CHAR('24 ----------- $2,430.00 【 SQL> selectto_char('1200032432430', '$99,999.00') from dual;TO_CHAR('12 ----------- ########### 如果出現上述這種情況,那說明第一個參數太長了】l 使用 TO_NUMBER 函數將字元轉換成數字:SQL> select to_number('123','99,999') from dual;TO_NUMBER('123','99,999') ------------------------- 123 l 使用 TO_DATE 函數將字元轉換成日期:SQL> select to_date('1992-3-4','yyyy/mm/dd') from dual;TO_DATE('1992- -------------- 04-3月 -92通用函數:這些函數適用於任何資料類型,同時也適用於空值:l NVL (expr1, expr2)l 將空值轉換成一個已知的值:l 可以使用的資料類型有日期、字元、數字。l 函數的一般形式:l NVL(commission_pct,0)l NVL(hire_date,'01-JAN-97')l NVL(job_id,'No Job Yet')l NVL2 (expr1, expr2, expr3)l NULLIF (expr1, expr2)l COALESCE (expr1, expr2, ..., exprn) SQL> select nvl2(comm,comm,0) from emp;NVL2(COMM,COMM,0) ----------------- 0 300 500 0 1400 SQL> selectlength(first_name),length(last_name),nullif(length(first_name),length(last_name))from employees;LENGTH(FIRST_NAME)LENGTH(LAST_NAME) ----------------------------------- NULLIF(LENGTH(FIRST_NAME),LENGTH(LAST_NAME)) -------------------------------------------- 7 9 7 4 4 5 5 使用 COALESCE 函數l COALESCE 與 NVL 相比的優點在於 COALESCE 可以同時處理交替的多個值。l 如果第一個運算式為空白,則返回下一個運算式,對其他的參數進行COALESCE 。 SQL> select coalesce(comm,10) from emp;COALESCE(COMM,10) ----------------- 10 300 500 10 1400 條件運算式在SQL語句中使用if—then—else邏輯使用兩種方法:Case運算式SQL> selectlast_name,job_id,salary,2 case job_id when 'IT_PRDG'then 1.10*salary 3 when'ST_CLERK' then 1.15*salary 4 when'SA_REP' then 1.20*salary 5 else salary end "REVISED_SALARY" 6 from employees;Decode函數 1 select last_name,job_id,salary, 2 decode(job_id,'IT_PRDG', 1.10*SALARY, 3 'ST_CLERK',1.15*salary, 4 'SA_REP',1.20*salary,salary) 5* revised_salary fromemployees嵌套函數單行函數可以嵌套。嵌套函數的執行順序是由內到外。SQL> selectlast_name,nvl(to_char(manager_id),'No Manager') from employees where manager_idis null;