暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何理解Oracle中的interval时间格式

SQL数据库运维 2022-11-08
4997

点击蓝色字关注“SQL数据库运维”,回复“SQL”获取2TB学习资源!

Oracle INTERVAL数据类型简介

INTERVAL 数据类型用来存储两个时间戳之间的时间间隔,也就是说Oracle提供INTERVAL 数据类型用于存储一段时间。可以指定 years and months, 或者 days,hours,minuts,seconds 之间的间隔。

Oracle支持两种INTERVAL 类型,它们分别是YEAR+TO+MONTH(间隔使用年份和月份)和DAY+TO+SECOND(使用包括小数秒在内的天,小时,分钟和秒存储间隔。)。每个类型都包含leading+fieldtrailing+field

1. Oracle INTERVAL YEAR TO MONTH

INTERVAL YEAR TO MONTH数据类型使用YEARMONTH字段存储一段时间。年份和月份之间必须有-      包含年、月的一段时间的间隔。可以按以下格式:

    INTERVAL 'year[-month]' leading (precision) TO trailing
    --或 leading 和 trailing 可以是 YEAR 或 MONTH
    INTERVAL 'integer[- integer]' {YEAR|MONTH} [(precision)] [ TO {YEAR|MONTH}]

    以下是参数:

    • year[-month]

      yearmonth是整个区间的leading trailing的整数。如果leading yeartrailingmonth,那么month字段的范围从011
      trailing 列必须小于leading(前导字段)列。例如,INTERVAL '1-2' MONTH TO YEAR是无效的,因为leading year大于monthleading 字段。

    • precision

      leading 字段中的最大数字位数。精度范围为:0~9,默认值为2

    下表说明了INTERVAL YEAR TO MONTH文字的示例:

    Oracle INTERVAL YEAR TO MONTH示例:

      select sysdate,sysdate +  interval '1' year from dual;--当前时间+1年
      select sysdate,sysdate+numtoyminterval(1,'year') as res from dual;--当前时间+1年
      select sysdate,sysdate + interval '1-0' year to month from dual;--当前时间+1年
      select sysdate,sysdate + interval '1-1' year to month from dual;--当前时间+1年1月
      select sysdate,sysdate + interval '100' year(3) from dual;--当前时间+100年
      select sysdate,sysdate + interval '100-1' year(3) to month from dual;--当前时间+100年1月

      执行错误举例并解析:

        --报错ORA-01873: 间隔的前导精度太小,因为100是3位数,而2只指定了两位
        select sysdate,sysdate + interval '100' year(2) from dual;


        --报错ORA-01873: 间隔的前导精度太小,因为100是3位数,而2只指定了两位
        select sysdate,sysdate + interval '100-1' year(2) to month from dual;
        2.Oracle INTERVAL DAY TO SECOND数据类型
        INTERVAL DAY TO SECOND是一种按天,小时,分钟和秒钟存储一段时间。

        以下显示INTERVAL DAY TO SECOND数据类型的语法:


          INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

          在上面这个语法中

          • day_precision- 是DAY
            字段中的位数。取值范围是 0~9
            ,缺省值是 2

          • fractional_seconds_precisionSECOND
            字段小数部分的位数。范围从 0~9
            如果省略fractional_seconds_precision
            ,则默认为 6


          Oracle INTERVAL DAY TO SECOND示例:

            select sysdate,sysdate+1 from dual;--当前时间+1天
            select sysdate,sysdate + interval '1' day from dual;--当前时间+1天
            select sysdate,sysdate+numtodsinterval(1,'day') as res from dual;--当前时间+1天
            select sysdate,sysdate + interval '1 0' day to hour from dual;--当前时间+1天
            select sysdate,sysdate + interval '1 1' day to hour from dual;--当前时间+1天1小时
            select sysdate,sysdate + interval '1 01:01' day to minute from dual;--当前时间+1天1小时1分钟
            select sysdate,sysdate + interval '1 01:01:01' day to second from dual;--当前时间+1天1小时1分钟1秒
            select sysdate,sysdate -interval '1' yearsysdate -interval '1' monthsysdate -interval '1' day,sysdate -interval '1' HOUR,sysdate -interval '1' MINUTE,sysdate-interval '1' second from dual;
            --此刻、1年前、1月前、1天前、1小时前、1分钟、1秒前的时间点

            点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。


            动动小手点击加关注呦☟☟☟

            文章转载自SQL数据库运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论