总是觉得自己写的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;