Oracle常用函数详解
2014-03-10 10:06
351 查看
Oracle函数分为单行函数和聚集函数两类:
单行函数:
单行函数对单行操作,每行返回一个结果,有可能返回值与原参数数据类型不一致(转换函数),单行函数可以写在SELECT,WHERE,ORDER
BY子句中,有些函数没有参数,有些函数有一个或多个参数,函数可以嵌套。
单行函数包括字符函数,日期函数,转换函数和数字函数。下面仅介绍日期函数和转换函数。
日期函数
日期函数对日期进行计算。常用的日期函数包括:
<1>.SYSDATE:返回系统日期
<2>.MONTHS_BETWEEN:返回两个日期间隔的月数
select months_between('02-2月-06','02-2月-06') from
dual;
<3>.ADD_MONTHS:在指定日期基础上加上相应的月数
select add_months('02-2月-06',8) from dual;
<4>.NEXT_DAY:返回某一日期的下一个指定日期
select next_day('1-2月-12','星期一')
next_day from dual;
<5>.LAST_DAY:返回指定日期当月最后一天的日期
select last_day('1-2月-12')
last_day from dual;
<6>.ROUND(date[,'fmt'])对日期进行指定格式的四舍五入操作,按照YEAR、MONTH、DAY等进行四舍五入
SELECT employee_id, hire_date,
ROUND(hire_date, 'MONTH') FROM employees WHERE
SUBSTR(hire_date,-2,2)='98';
<7>.TRUNC(date[,'fmt'])对日期进行指定格式的截断操作。按照
YEAR、MONTH、DAY等进行截断
SELECT employee_id, hire_date, TRUNC(hire_date,
'MONTH') FROM employees WHERE SUBSTR(hire_date,-2,2)='98';
<8>.EXTRACT:返回从日期类型中取出指定年、月、日
SELECT last_name, hire_date,
EXTRACT (MONTH FROM HIRE_DATE) MONTH FROM
employees WHERE department_id = 90;
转换函数
转换函数通常在字符类型、日期类型、数字类型之间进行显性转换。
<1>.TO_CHAR(date|number|'fmt'):把日期类型/数字类型的表达式或列转换为字符类型
--‘fmt’:指的是需要显示的格式,需要写在单引号中,并且是大小写敏感,可包含任何有效的日期格式
例子:SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') "date"
FROM DUAL;
数字到字符型转换:
进行数字类型到字符型转换,格式中的宽度一定要超过实际列宽度,否则会显示为###
-- 9:一位数字
-- 0:一位数字或前
-- $:显示为美元符
-- L:显示按照区域
-- .:小数点
-- ,:千位分割符
select to_char(9832, '$9,999.00') from
dual;
<2>.TO_NUMBER(char[,’fmt’]): 把字符类型列或表达式转换为数字类型
select to_number('9832', 9999)
from dual;
<3>.TO_DATE(char[,‘fmt’]): 把字符类型列或表达式转换为日期类型
select to_date('20120304', 'yy-mm-dd')
from dual;
2.聚合函数
聚合函数同时对一组据进行操作,返回结果比如计算的总和平均值
聚合函数同时对一组据进行操作,返回结果比如计算的总和平均值等。常用聚合函数有:***G,MAX,MIN,SUM,COUNT。
count函数单独讲一下,它用来计算某一列的数量。
括号中如果是列名的话,oracle将会直接忽略NULL值。但是如果是“*”或常量则包括NULL。
若要去掉重复值,可以使用distinct。例如:
select
count(distinct dptno) from emp;
另外要提的是count经常和group by合用,里面有一点需要注意一下:
GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你用了GROUP BY 按
某个字段分组,那如果其他字段内容不同,就变成一对多,比如下面所示:
A B
1 abc
1 bcd
1 asdfg
select A,B from table group by A
按道理查出来应该是下面这样:
A B
abc
1 bcd
asdfg
但是这样是不对的,因为无法显示。所以需要将右边3条聚合成一条,这就要用到聚合函数,比如
select A,count(B) 数量 from table group by A
这样的结果就是
A 数量
1 3
这样就引出了一个很重要的原则,就是 select 后面的所有字段中,没有使用聚合函数的列,必须出现在 group by
后面才行噢。换句话说,没有group by的字段,应当使用聚合函数聚合到一起。
单行函数:
单行函数对单行操作,每行返回一个结果,有可能返回值与原参数数据类型不一致(转换函数),单行函数可以写在SELECT,WHERE,ORDER
BY子句中,有些函数没有参数,有些函数有一个或多个参数,函数可以嵌套。
单行函数包括字符函数,日期函数,转换函数和数字函数。下面仅介绍日期函数和转换函数。
日期函数
日期函数对日期进行计算。常用的日期函数包括:
<1>.SYSDATE:返回系统日期
<2>.MONTHS_BETWEEN:返回两个日期间隔的月数
select months_between('02-2月-06','02-2月-06') from
dual;
<3>.ADD_MONTHS:在指定日期基础上加上相应的月数
select add_months('02-2月-06',8) from dual;
<4>.NEXT_DAY:返回某一日期的下一个指定日期
select next_day('1-2月-12','星期一')
next_day from dual;
<5>.LAST_DAY:返回指定日期当月最后一天的日期
select last_day('1-2月-12')
last_day from dual;
<6>.ROUND(date[,'fmt'])对日期进行指定格式的四舍五入操作,按照YEAR、MONTH、DAY等进行四舍五入
SELECT employee_id, hire_date,
ROUND(hire_date, 'MONTH') FROM employees WHERE
SUBSTR(hire_date,-2,2)='98';
<7>.TRUNC(date[,'fmt'])对日期进行指定格式的截断操作。按照
YEAR、MONTH、DAY等进行截断
SELECT employee_id, hire_date, TRUNC(hire_date,
'MONTH') FROM employees WHERE SUBSTR(hire_date,-2,2)='98';
<8>.EXTRACT:返回从日期类型中取出指定年、月、日
SELECT last_name, hire_date,
EXTRACT (MONTH FROM HIRE_DATE) MONTH FROM
employees WHERE department_id = 90;
转换函数
转换函数通常在字符类型、日期类型、数字类型之间进行显性转换。
<1>.TO_CHAR(date|number|'fmt'):把日期类型/数字类型的表达式或列转换为字符类型
--‘fmt’:指的是需要显示的格式,需要写在单引号中,并且是大小写敏感,可包含任何有效的日期格式
例子:SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') "date"
FROM DUAL;
数字到字符型转换:
进行数字类型到字符型转换,格式中的宽度一定要超过实际列宽度,否则会显示为###
-- 9:一位数字
-- 0:一位数字或前
-- $:显示为美元符
-- L:显示按照区域
-- .:小数点
-- ,:千位分割符
select to_char(9832, '$9,999.00') from
dual;
<2>.TO_NUMBER(char[,’fmt’]): 把字符类型列或表达式转换为数字类型
select to_number('9832', 9999)
from dual;
<3>.TO_DATE(char[,‘fmt’]): 把字符类型列或表达式转换为日期类型
select to_date('20120304', 'yy-mm-dd')
from dual;
2.聚合函数
聚合函数同时对一组据进行操作,返回结果比如计算的总和平均值
聚合函数同时对一组据进行操作,返回结果比如计算的总和平均值等。常用聚合函数有:***G,MAX,MIN,SUM,COUNT。
count函数单独讲一下,它用来计算某一列的数量。
括号中如果是列名的话,oracle将会直接忽略NULL值。但是如果是“*”或常量则包括NULL。
若要去掉重复值,可以使用distinct。例如:
select
count(distinct dptno) from emp;
另外要提的是count经常和group by合用,里面有一点需要注意一下:
GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你用了GROUP BY 按
某个字段分组,那如果其他字段内容不同,就变成一对多,比如下面所示:
A B
1 abc
1 bcd
1 asdfg
select A,B from table group by A
按道理查出来应该是下面这样:
A B
abc
1 bcd
asdfg
但是这样是不对的,因为无法显示。所以需要将右边3条聚合成一条,这就要用到聚合函数,比如
select A,count(B) 数量 from table group by A
这样的结果就是
A 数量
1 3
这样就引出了一个很重要的原则,就是 select 后面的所有字段中,没有使用聚合函数的列,必须出现在 group by
后面才行噢。换句话说,没有group by的字段,应当使用聚合函数聚合到一起。
相关文章推荐
- 常用Oracle分析函数详解 [http://www.cnblogs.com/benio/archive/2011/06/01/2066106.html]
- oracle常用函数详解(详细)
- 常用Oracle分析函数详解
- 常用Oracle分析函数详解
- oracle常用函数详解(详细)
- Oracle常用日期型函数详解(转)
- 常用Oracle分析函数详解
- oracle常用函数详解
- oracle常用函数详解(详细)
- oracle常用函数详解(详细)
- Oracle常用函数TO_CHAR用法详解(转自博客园-小小草博文)
- Oracle常用日期型函数详解
- 常用Oracle分析函数详解
- oracle常用函数详解(详细)
- 常用Oracle分析函数详解
- 常用Oracle分析函数详解
- Oracle 11g 常用函数(Functions)详解
- Oracle常用函数部分详解(decode,nvl)
- Oracle常用及非常用函数详解
- 【Oracle】的子查询和常用函数详解