总是觉得自己写的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') HelloWorld
SUBSTR('HelloWorld',1,5) Hello
LENGTH('HelloWorld') 10
INSTR('HelloWorld', 'W') 6(W出现的位置)
LPAD(salary,10,'*') *****24000
RPAD(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.96774194
Add_months 向指定日期中加上若干月数
SQL> selectadd_months(sysdate,2) from dual;
ADD_MONTHS(SYS
--------------
13-5月 -12
Next_day 指定日期的下一个日期
SQL> selectnext_day(sysdate,'星期二') from dual;
NEXT_DAY(SYSDA
--------------
20-3月 -12
Last_day 本月的最后一个日期
SQL> selectlast_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
31-3月 -12
Round 日期四舍五入
SQL> selectround(sysdate) from dual;
ROUND(SYSDATE)
--------------
13-3月 -12
Trunk 日期截断
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;