1.add_months(sysdate,-1)正值下月,负值上月
racle add_months(time,months)函数可以得到某一时间之前或之后n个月的时间
select add_months(sysdate,-6) from dual;
该查询的结果是当前时间半年前的时间
select add_months(sysdate,6) from dual;
该查询的结果是当前时间半年后的时间
2.trunc()截取
trunc(Date)的用法一般有以下几种(除了hh是小时,其他的都是截取到天):
trunc(sysdate,'yyyy');//返回当前年的第一天
trunc(sysdate, 'mm');//返回当前月的第一天
trunc(sysdate, 'dd');//返回当前时间的年月日
trunc(sysdate, 'd');//返回当前星期的第一天
trunc(sysdate, 'hh');//返回当前小时
trunc(number)的用法一般有以下几种:
trunc(55.5,-1) = 50;//-1(负数)表示从小数点左边第一位截取后面全置为零;
trunc(55.55,1) = 55.5;//1(正数)表示小数点后面保留一位;
trunc(55.55) = 55;//截取整数部分;
3.last_day()
last_day(time):返回指定日期所在月份的最后一天;
查询当前月份的最后一天;
select last_day(sysdate) from dual;
select last_day(to_date('19921017',yyymmdd)) from dual
--last_day和to_date搭配,to_date和数字搭配
查询某天所在月份的最后一天:两条语句都是
select last_day(to_date('19921009','yyyymmdd')) from dual;
select last_day(to_date('199210','yyyymm'))from dual;
--两句的作用一样,都是取这个月的最后一天,但是要注意的是'19921017'要与后面对应的时间字符长度一致
--例如:'19921017'的长度与'yyyymmdd'的长度一样
4.MONTHS_BETWEEN (date1, date2)
用于计算date1和date2之间有几个月。
如果date1在日历中比date2晚,那么MONTHS_BETWEEN()就返回一个正数。
如果date1在日历中比date2早,那么MONTHS_BETWEEN()就返回一个负数。
如果date1和date2日期一样,那么MONTHS_BETWEEN()就返回一个0。
实验如下:
SQL> select months_between(to_date('2014-3-21','yyyy-mm-dd'), to_date('2014-1-10','yyyy-mm-dd')) months
2 from dual;
MONTHS
----------
2.35483871
SQL> select months_between(to_date('2014-1-10','yyyy-mm-dd'), to_date('2014-3-21','yyyy-mm-dd')) months
2 from dual;
MONTHS
----------
-2.3548387
SQL> select months_between(to_date('2014-1-10','yyyy-mm-dd'), to_date('2014-1-10','yyyy-mm-dd')) months
2 from dual;
MONTHS
----------
0
--2014.3.21和2014.1.10之间,相差2个月加11天,11天按月换算成小数(在oracle里面,以31天为基数):
SQL> select 11/31 from dual;
11/31
----------
.35483871
5.to_date()与to_char()
在实际的工作中会经常会用到to_char()、to_date()函数来对时间、日期进行处理。
5.1 to_char()
将时间日期按照制定的格式输出得到的是字符串,而非date类型。
select sysdate,to_char(sysdate,'yyyy-mm-dd')from dual;
select sysdate,to_char(sysdate,'yyyy/mm/dd')from dual;
select sysdate,to_char(sysdate,'yyyymmdd')from dual;
select sysdate,to_char(sysdate,'yyyymmdd hh24:mi:ss')from dual;
运行的输出结果为:
2017/6/15 17:07:24 2017-06-15
2017/6/15 17:07:25 2017/06/15
2017/6/15 17:07:25 20170615
2017/6/15 17:07:25 20170615 17:07:25
用to_char()可以得到日期中的年、月、日、时、分
select sysdate,to_char(sysdate,'yyyy')from dual;
select sysdate,to_char(sysdate,'mm')from dual;
select sysdate,to_char(sysdate,'hh24')from dual;
select sysdate,to_char(sysdate,'mi')from dual;
运行的输出结果为:
2017/6/15 17:09:14 2017
2017/6/15 17:09:14 06
2017/6/15 17:09:14 17
2017/6/15 17:09:14 09
5.2 to_date()
将字符串转换为具体指定的时间日期格式
select sysdate,to_date('20170615','yyyymmdd')from dual;
select sysdate,to_date('20170615','yyyy-mm-dd')from dual;
select sysdate,to_date('20170615','yyyy/mm/dd')from dual;
select sysdate,to_date('20170615','yyyy-mm-dd hh24:mi:ss')from dual;
运行输出结果为:
2017/6/15 17:20:27 2017/6/15
2017/6/15 17:20:27 2017/6/15
2017/6/15 17:20:27 2017/6/15
2017/6/15 17:20:27 2017/6/15