点击蓝色字关注“SQL数据库运维”,回复“SQL”获取2TB学习资源!
Oracle INTERVAL数据类型简介
INTERVAL 数据类型用来存储两个时间戳之间的时间间隔,也就是说Oracle提供INTERVAL 数据类型用于存储一段时间。可以指定 years and months, 或者 days,hours,minuts,seconds 之间的间隔。
Oracle支持两种INTERVAL 类型,它们分别是YEAR+TO+MONTH(间隔使用年份和月份)和DAY+TO+SECOND(使用包括小数秒在内的天,小时,分钟和秒存储间隔。)。每个类型都包含leading+field和trailing+field。
1. Oracle INTERVAL YEAR TO MONTH
INTERVAL YEAR TO MONTH数据类型使用YEAR和MONTH字段存储一段时间。年份和月份之间必须有- 包含年、月的一段时间的间隔。可以按以下格式:
INTERVAL 'year[-month]' leading (precision) TO trailing--或 leading 和 trailing 可以是 YEAR 或 MONTHINTERVAL 'integer[- integer]' {YEAR|MONTH} [(precision)] [ TO {YEAR|MONTH}]
以下是参数:
year[-month]
year和month是整个区间的leading 和trailing的整数。如果leading 是year,trailing是month,那么month字段的范围从0到11。
trailing 列必须小于leading(前导字段)列。例如,INTERVAL '1-2' MONTH TO YEAR是无效的,因为leading 列year大于month的leading 字段。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;
以下显示INTERVAL DAY TO SECOND数据类型的语法:
INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]
在上面这个语法中
day_precision- 是
DAY
字段中的位数。取值范围是0~9
,缺省值是2
。fractional_seconds_precision是
SECOND
字段小数部分的位数。范围从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' year,sysdate -interval '1' month,sysdate -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,获取学习资料。
动动小手点击加关注呦☟☟☟




