Oracle SQL 提供了用于执行特定操作的专用函数。这些函数大大增强了 SQL 语言的功能。 函数可以接受零个或者多个输入参数,并返回一个输出结果。Oracle 数据库中主要使用两种 类型的函数:
1. 单行函数:对每一个函数应用在表的记录中时,只能输入一行结果,返回一个结果, 比如:MOD(x,y)返回 x 除以 y 的余数(x 和 y 可以是两个整数,也可以是表中的整 数列)。常用的单行函数有:
字符函数:对字符串操作。
数字函数:对数字进行计算,返回一个数字。
转换函数:可以将一种数据类型转换为另外一种数据类型。
日期函数:对日期和时间进行处理。
2. 聚合函数:聚合函数同时可以对多行数据进行操作,并返回一个结果。比如 SUM(x) 返回结果集中 x 列的总合。
字符函数
字符函数接受字符参数,这些参数可以是表中的列,也可以是一个字符串表达式。下表 列出了常用的字符函数。
数字函数
数字函数接受数字参数,参数可以来自表中的一列,也可以是一个数字表达式。
说明:
1. ROUND(X[,Y]),四舍五入。 在缺省 y 时,默认 y=0;比如:ROUND(3.56)=4。y 是正整数,就是四舍五入到小数点后 y 位。ROUND(5.654,2)=5.65。 y 是负整数,四舍五入到小数点左边|y|位。ROUND(351.654,-2)=400。
2. TRUNC(x[,y]),直接截取,不四舍五入。 在缺省 y 时,默认 y=0;比如:TRUNC (3.56)=3。 y 是正整数,就是四舍五入到小数点后 y 位。TRUNC (5.654,2)=5.65。 y 是负整数,四舍五入到小数点左边|y|位。TRUNC (351.654,-2)=300。
日期函数
日期函数对日期进行运算。常用的日期函数有:
1. ADD_MONTHS(d,n),在某一个日期 d 上,加上指定的月数 n,返回计算后的新日期。 d 表示日期,n 表示要加的月数。
SELECT SYSDATE,ADD_MONTHS(SYSDATE,5) FROM DUAL
2. LAST_DAY(d),返回指定日期当月的最后一天。
SELECT SYSDATE,LAST_DAY(SYSDATE) FROM DUAL
3. ROUND(d[,fmt]),返回一个以 fmt 为格式的四舍五入日期值,d 是日期,fmt 是格式 模型。默认 fmt 为 DDD,即月中的某一天。
如果 fmt 为“YEAR”则舍入到某年的 1 月 1 日,即前半年舍去,后半年作为下 一年。
如果 fmt 为“MONTH”则舍入到某月的 1 日,即前月舍去,后半月作为下一 月。
默认为“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作为第 二天。
如果 fmt 为“DAY”则舍入到最近的周的周日,即上半周舍去,下半周作为下 一周周日。
SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,'DAY'),ROUND(SYSDATE,'MONTH'),ROUND(SYSDATE,'YEAR') FROM DUAL
与 ROUND 对应的函数时 TRUNC(d[,fmt])对日期的操作,TRUNC 与 ROUND 非常相似,只 是不对日期进行舍入,直接截取到对应格式的第一天。
4. EXTRACT(fmt FROM d),提取日期中的特定部分。
fmt 为:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY 可以为 DATE 类型匹配,也可以与 TIMESTAMP 类型匹配;但是 HOUR、MINUTE、SECOND 必 须与 TIMESTAMP 类型匹配。HOUR 匹配的结果中没有加上时区,因此在中国运行的结果小 8 小时。
SELECT SYSDATE "date", EXTRACT(YEAR FROM SYSDATE) "year", EXTRACT(MONTH FROM SYSDATE) "month", EXTRACT(DAY FROM SYSDATE) "day", EXTRACT(HOUR FROM SYSTIMESTAMP) "hour", EXTRACT(MINUTE FROM SYSTIMESTAMP) "mintue", EXTRACT(SECOND FROM SYSTIMESTAMP) "second" FROM DUAL
转换函数
转换函数将值从一种数据类型转换为另外一种数据类型。常用的转换函数有:
1. TO_CHAR(d|n[,fmt]) 把日期和数字转换为制定格式的字符串。fmt 是格式化字符串
-- 代码演示:TO_CHAR 对日期的处理 SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') "date" FROM DUAL
针对数字的格式化,格式化字符有:
-- 代码演示:TO_CHAR 对数字的处理 SELECT TO_CHAR(-123123.45,'L9.9EEEEPR') "date" FROM DUAL
2. TO_DATE(x [,fmt]) 把一个字符串以 fmt 格式转换为一个日期类型
SELECT TO_DATE('2009-8-9 1:30:10',' YYYY-MM-DD HH24:MI:SS ') "date" FROM DUAL;
3. TO_NUMBER(x[,fmt]) 把一个字符串以 fmt 格式转换为一个数字。fmt 格式字符参考表 3。
SELECT TO_NUMBER('-$12,345.67','$99,999.99') "NUM" FROM DUAL
其他单行函数
1. NVL(x,value) 如果 x 为空,返回 value,否则返回 x。
2. NVL2(x,value1,value2) 如果 x 非空,返回 value1,否则返回 value2。
聚合函数
聚合函数同时对一组数据进行操作,返回一行结果,比如计算一组数据的总和,平均值 等。