本帖最后由 dan 于 2020-3-24 15:12 编辑
INTERVAL 表示一段时间,可以把它看做一个整体与日期类型数据相加减,它有两种类型
1、interval year to month 类型
案例1:select INTERVAL '123-2' YEAR(3) TO MONTH from dual; 表示: 123年2个月, "YEAR(3)" 表示年的精度为3, 可见"123"刚好为3为有效数值, 如果该处YEAR(n), n<3就会出错, 注意默认是2,'123-2'那个连接符必须为'-' (+123-02) 案例2: select INTERVAL '123' YEAR(3) from dual; --表示: 123年0个月 (+123-00) 案例3: select interval '300' month from dual; --表示 300月,一年12月,自动换算成25年,如下 (+25-00) 案例4: select INTERVAL '123' YEAR from dual; --执行后无返回值,year默认精度是2,但是123是3位。 案例5: select INTERVAL '5-3' YEAR TO MONTH + INTERVAL '20' MONTH from dual;--表示: 5年3个月 + 20个月 = 6年11个月 (+000000006-11)
2、inter day to second 类型 案例1: select INTERVAL '4 5:12:10.222' DAY TO SECOND(3) from dual;--表示4天5小时12分10.222秒 (+04 05:12:10.222) 案例2: select INTERVAL '4 5:12' DAY TO MINUTE from dual; --表示: 4天5小时12分 (+04 05:12:00) 案例3: select INTERVAL '400 5' DAY(3) TO HOUR from dual; --表示: 400天5小时, 400为3为精度,所以"DAY(3)", 注意默认值为2. (+400 05:00:00) 案例4: select INTERVAL '400' DAY(3) from dual;--表示400天 (+400 00:00:00) 案例5: select INTERVAL '11:12:10.2222222' HOUR TO SECOND(7) from dual;--表示: 11小时12分10.2222222秒 (+00 11:12:10.2222222) 案例6: select INTERVAL '11:20' HOUR TO MINUTE from dual; --表示11小时20分 (+00 11:20:00) 3、其他用法: 解决比如:问你进入公司多少天了? 的问题 select (SYSDATE-TO_DATE('20150801', 'YYMMdd')) day(5) to second time from dual; 求精确的时间间隔,注意,year to month是个固定搭配,要3个单词一起用,同理day to second 过100天后日期是多少? select sysdate + interval '100' day(3) time from dual; 1年3个月后的日期? select sysdate + interval '1-3' year to month time from dual; |