oracle——系统时间相关函数

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金哥的小超人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值