日期函数

日期函数

    1.日期类型

        1)date:数据库中常用的日期类型,可以存储年月日时分秒

            默认格式:yy-mon-dd            date'yy-mon-dd'

            一共占用了7个字节,第一个字节存的是 世纪,(应该加上100)

                                            第二个字节存的是 年,

                                            第三个字节存的是 月,

                                            第四个字节存的是 日,

                                            第五个字节存的是 时,

                                            第六个字节存的是 分,

                                            第七个字节存的是 秒。

    2)timestamp:时间戳类型

        默认格式:yy-mon-dd hh:mi:ss

        与date类型相似,可以精确到纳秒。

        最多可以占用11个字节,前七个字节与date一致,从8到11个字节,存储的时精确度。

--2015-12-11可以转换为date和timestamp类型
select date'2015-12-11' from dual;
select timestamp'2015-12-11 1:12:50' from dual;

2.当前系统时间关键字

    sysdate:返回的时当前系统时间,年月日时分秒

    systimestamp:返回的是当前系统时间,可以精确到毫秒

--分别使用sysdate和systimestamp调用当前系统时间
select sysdate,systimestamp from dual;

3.日期之间的加减法:

    日期类型+1表示增加一天

    日期类型-1表示减少一天

--为当前时间增加增加一年
select add_months(sysdate,12) from dual;
--为当前时间增加一月
select add_months(sysdate,1) from dual;
--为当前时间增加一天
select sysdate+1 from dual;
--为当前时间增加一小时
select sysdate+1/24 from dual;
--为当前时间增加一分钟
select sysdate+1/24/60 from dual;
--为当前时间增加一秒钟
select sysdate+1/24/60/60 from dual;

4.日期函数:

    1)to_char(time,string)/to_date(time,string)

        to_char(time,string):将日期time按照string的格式转换成字符串类型(time为日期类型,string为字符串类型)

        to_date(time,string):将字符串类型time(string的格式)转换成日期类型(time,string均为字符串类型)

        字符串格式:

            YYYY/YY:年

            MM:月

            DD:日(当月第几天)

            HH24/HH:表示24/12小时制

            MI:表示分钟

            SS:表示秒

            AM:表示上下午

            day/dy:表示星期

            ww:该年的第几个星期

            w:该月的第几个星期

            d:表示一周的第几天

            ddd:表示当年的第几天

            如果格式中带有汉字,汉字必须用""引起来。

--将当前时间改"yyyy年mm月dd hh-mi-ss";
select to_char(sysdate,'yyyy"年"mm"月"dd hh-mi-ss') from dual;
--将自己的生日改为日期类型
select to_date('1997年12月11','yyyy"年"mm"月"dd') from dual;

        2)last_day(time):

        作用:查看time月份中的最后一天

--查看当前时间的最后一天
select last_day(sysdate) from dual;
--查看生日的月份的最后一天
select last_day(to_date('1997-12-11','yyyy-mm-dd')) from dual;

        3)next_day(date,num);

        作用:返回date(日期类型)的下一个周num的日期

                num:从1到7表示周日到周六

        (注意:如果当前时间是星期一,那么下一个周二(next_day(sysdate,3))就是明天)

--查看当前时间的下一个周日的日期
select next_day(sysdate,1) from dual;
--查看生日的下一个周日的日期
select next_day(to_date('1997-12-11','yyyy-mm-dd'),5) from dual;

    4)add_months(time,n):

        作用:在日期p1的基础上增加n个月,返回n个月后的日期

                n可以为小数(会截取到整数进行运算),也可以为负数(向前推进n个月)

--查看当前时间的前5个月的日子
select add_months(sysdate,-5) from dual;
--查看生日的后12.5个月
select add_months(to_date('1997-12-11','yyyy-mm-dd'),12.5) from dual;

    5)months_between(time1,time2)

        作用:计算time2到time1一共过了多少个月,会存在小数和负数的情况

--计算当前时间和生日相差的月月数
select months_between(sysdate,to_date('1997-12-11','yyyy-mm-dd')) from dual;

    6)extract(分量 from time)

        作用:从日期time中提取分量

        分量:包括year(年)、month(月)、day(日)、hour(小时)、minute(分钟)、second(秒)

        (extract可以从date类型数据中分离出year、hour、minute,

            timestamp类型日期中分离出year、hour、day、hour、minute、second)

--使用关键字extract从当前时间分离出年月日时分秒
select extract(year from sysdate) year,
       extract(month from sysdate) month,
       extract(day from sysdate) day,
       extract(hour from systimestamp) hour,
       extract(minute from systimestamp) minute,
       extract(second from systimestamp) second from dual;

    获取两个日期之间的具体时间间隔,extract函数是最好的选择

--计算当前日期与生日相差的天数
select extract(day from systimestamp-timestamp'1997-12-11 01:12:50') from dual;
--这是网上我所参考的一个人的数据
select extract(day from dt2-dt1) day  
      ,extract(hour from dt2-dt1) hour  
      ,extract(minute from dt2-dt1) minute  
      ,extract(second from dt2-dt1) second  
from (  
     select to_timestamp('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1  
           ,to_timestamp('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2  
     from dual)

        5.得到一些日期的计算

--得到当前的日期
select sysdate from dual;
--得到当天凌晨0点0分0秒的日期
select to_char(trunc(sysdate),'yyyy-mm-dd hh24-mi-ss') from dual;
--得到当天的最后一秒
select to_char(trunc(sysdate)+0.99999,'yyyy-mm-dd hh24-mi-ss') from dual;
--得到本月1日的日期
select trunc(sysdate,'mm') from dual;
--得到一年的每一天
select trunc(sysdate,'yyyy')+rn-1 from 
(select rownum rn from all_objects where rownum<366);
--判断某一日子所在年是否是闰年
select decode(to_char(last_day(add_months(trunc(sysdate,'yyyy'),1)),'dd'),'29','闰年','平年') from dual;


    




    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值