oracle中的INTERVAL函数用法

本文详细介绍了Oracle数据库中INTERVAL函数的使用,包括year to month和day to second两种类型,展示了各种时间间隔的表示方法和精度设定,以及自动换算规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle中的INTERVAL函数用法

一、interval year to month 类型

格式:
该数据类型常用来表示一段时间差, 注意时间差只精确到年和月, precision为年或月的精确域, 有效范围是0到9, 默认值为2

[ ] 为可选项
|  表示任选其中一项
INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]

案例1:
表示123年2个月。“YEAR(3)” 表示年的精度为3, 如果YEAR(n), n<3就会报错,ORA-01873间隔的前导精度太小(注意默认是2)

select INTERVAL '123-2' YEAR(3) TO MONTH from dual;   +123-02

案例2:
如果前面没有写减号,可以省略后面的’TO {YEAR | MONTH}’,如果要写后面的必须跟前面的统一

select INTERVAL '12' YEAR from dual;   +12-00 --表示12年
select INTERVAL '12' YEAR TO YEAR from dual;   +12-00 --表示12年
select INTERVAL '9' MONTH from dual;   +00-09 --表示9个月
select INTERVAL '9' MONTH TO MONTH from dual;   +00-09 --表示9个月

案例3:
表示12个月,一年12月,自动换算成1年

select INTERVAL '12' MONTH from dual;   +01-00

案例4:
YEAR和MONTH的默认精度为2,MONTH 的精度是换算成年来看的

select INTERVAL '1200' MONTH from dual;   --ORA-01873间隔的前导精度太小
select INTERVAL '1200' MONTH(3) TO MONTH from dual;   +100-00
select INTERVAL '1199' MONTH from dual;   +99-11

案例5:

select INTERVAL '5-11' YEAR TO MONTH + INTERVAL '20' MONTH from dual;   +07-07 --表示 5年11个月+20个月=7年7个月 
select sysdate - (INTERVAL '1' MONTH) from dual;    2021/2/9 13:14:44 --表示当前时间前一个月时间 
二、interval day to second 类型

格式:
leading_precision值的范围是0到9, 默认是2; time_expr的格式为:HH[:MI[:SS[.n]]] or MI[:SS[.n]] or SS[.n], n表示微秒
范围值:

  • HOUR: 0 to 23
  • MINUTE: 0 to 59
  • SECOND: 0 to 59.999999999
[ ] 为可选项
|  表示任选其中一项
INTERVAL '{ integer | integer time_expr | time_expr }' { { DAY | HOUR | MINUTE } [ ( leading_precision ) ]
| SECOND [ ( leading_precision [, fractional_seconds_precision ] ) ] } [ TO { DAY | HOUR | MINUTE | SECOND [ (fractional_seconds_precision) ] } ]

案例1:

 select INTERVAL '5 5:20:12.15' DAY TO SECOND(3) from dual;   +05 05:20:12.150 --表示5天5小时20分12.150秒
 select INTERVAL '5 5:20:12.15' DAY TO SECOND(2) from dual;   +05 05:20:12.15 --表示5天5小时20分12.15秒

案例2:
表示5天5小时20分

select INTERVAL '5 5:20' DAY TO MINUTE from dual;   +05 05:20:00 

案例3:
表示365天5小时, “DAY(3)” 表示天的精度为3, 如果DAY(n), n<3就会报错,ORA-01873间隔的前导精度太小(注意默认是2)

 select INTERVAL '365 5' DAY(3) TO HOUR from dual;   +365 05:00:00 

案例4:
表示365天

select INTERVAL '365' DAY(3) from dual;   +365 00:00:00

案例5:
表示5小时20分12.15555秒

select INTERVAL '5:20:12.15555' HOUR TO SECOND(5) from dual;   +00 05:20:12.15555

案例6:
表示5小时20分

select INTERVAL '5:20' HOUR TO MINUTE from dual;   +00 05:20:00

案例7:

select  INTERVAL '30.12345' SECOND(4) from dual;   +0000 00:00:30.123450 --表示30.123450秒
select  INTERVAL '30.12345' SECOND(2,4) from dual;   +00 00:00:30.1235 --表示30.1235秒, 因为该地方秒的后面精度设置为4, 要进行四舍五入

案例8:
表示1天,一天24小时,自动换算成1天

select INTERVAL '24' HOUR  from dual;   +01 00:00:00

案例9:

select INTERVAL '20' DAY - INTERVAL '21' HOUR from dual;   +000000019 03:00:00.000000000 --表示 20天-21小时=19天3小时
select sysdate - (INTERVAL '1' HOUR) from dual;   2021/3/9 12:14:44 --表示当前时间前一个小时时间 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值