您的位置:首页 > 数据库 > Oracle

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的字段,应当使用聚合函数聚合到一起。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: