oracle中的INTERVAL函数详解
oracle中的INTERVAL函数详解INTERVAL YEAR TO MONTH数据类型Oracle语法:INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]该数据类型常用来表示一段时间差, 注意时间差只精确到年和月. precision为年或月的精确域, 有效范围是0到9, 默认值为2.eg:INTERVAL '123-2' YEAR(3) TO MONTH表示: 123年2个月, "YEAR(3)" 表示年的精度为3, 可见"123"刚好为3为有效数值, 如果该处YEAR(n), n<3就会出错, 注意默认是2.INTERVAL '123' YEAR(3)表示: 123年0个月INTERVAL '300' MONTH(3)表示: 300个月, 注意该处MONTH的精度是3啊.INTERVAL '4' YEAR表示: 4年, 同 INTERVAL '4-0' YEAR TO MONTH 是一样的INTERVAL '50' MONTH表示: 50个月, 同 INTERVAL '4-2' YEAR TO MONTH 是一样INTERVAL '123' YEAR表示: 该处表示有错误, 123精度是3了, 但系统默认是2, 所以该处应该写成 INTERVAL '123' YEAR(3) 或"3"改成大于3小于等于9的数值都可以的INTERVAL '5-3' YEAR TO MONTH + INTERVAL '20' MONTH =INTERVAL '6-11' YEAR TO MONTH表示: 5年3个月 + 20个月 = 6年11个月与该类型相关的函数:NUMTODSINTERVAL(n, 'interval_unit')将n转换成interval_unit所指定的值, interval_unit可以为: DAY, HOUR, MINUTE, SECOND注意该函数不可以转换成YEAR和MONTH的.NUMTOYMINTERVAL(n, 'interval_unit')interval_unit可以为: YEAR, MONTHeg: (Oracle Version 9204, RedHat Linux 9.0)SQL> select numtodsinterval(100,'DAY') from dual;NUMTODSINTERVAL(100,'DAY')---------------------------------------------------------------------------+000000100 00:00:00.000000000SQL> c/DAY/SECOND1* select numtodsinterval(100,'SECOND') from dualSQL> /NUMTODSINTERVAL(100,'SECOND')---------------------------------------------------------------------------+000000000 00:01:40.000000000SQL> c/SECOND/MINUTE1* select numtodsinterval(100,'MINUTE') from dualSQL> /NUMTODSINTERVAL(100,'MINUTE')---------------------------------------------------------------------------+000000000 01:40:00.000000000SQL> c/MINUTE/HOUR1* select numtodsinterval(100,'HOUR') from dualSQL> /NUMTODSINTERVAL(100,'HOUR')---------------------------------------------------------------------------+000000004 04:00:00.000000000SQL> c/HOUR/YEAR1* select numtodsinterval(100,'YEAR') from dualSQL> /select numtodsinterval(100,'YEAR') from dual*ERROR at line 1:ORA-01760: illegal argument for functionSQL> select numtoyminterval(100,'year') from dual;NUMTOYMINTERVAL(100,'YEAR')---------------------------------------------------------------------------+000000100-00SQL> c/year/month1* select numtoyminterval(100,'month') from dualSQL> /NUMTOYMINTERVAL(100,'MONTH')---------------------------------------------------------------------------+000000008-04时间的计算:SQL> select to_date('1999-12-12','yyyy-mm-dd') - to_date('1999-12-01','yyyy-mm-dd') from dual;TO_DATE('1999-12-12','YYYY-MM-DD')-TO_DATE('1999-12-01','YYYY-MM-DD')---------------------------------------------------------------------11-- 可以相减的结果为天.SQL> c/1999-12-12/1999-01-121* select to_date('1999-01-12','yyyy-mm-dd') - to_date('1999-12-01','yyyy-mm-dd') from dualSQL> /TO_DATE('1999-01-12','YYYY-MM-DD')-TO_DATE('1999-12-01','YYYY-MM-DD')----------------------------------------------------------------------323-- 也可以为负数的SQL> c/1999-01-12/2999-10-121* select to_date('2999-10-12','yyyy-mm-dd') - to_date('1999-12-01','yyyy-mm-dd') from dualSQL> /TO_DATE('2999-10-12','YYYY-MM-DD')-TO_DATE('1999-12-01','YYYY-MM-DD')---------------------------------------------------------------------365193下面看看INTERVAL YEAR TO MONTH怎么用.SQL> create table bb(a date, b date, c interval year(9) to month);Table created.SQL> desc bb;Name Null? Type----------------------------------------- -------- ----------------------------A DATEB DATEC INTERVAL YEAR(9) TO MONTHSQL> insert into bb values(to_date('1985-12-12', 'yyyy-mm-dd'), to_date('1984-12-01','yyyy-mm-dd'), null)1 row created.SQL> select * from bb;A B--------- ---------C---------------------------------------------------------------------------12-DEC-85 01-DEC-84SQL> update bb set c = numtoyminterval(a-b, 'year');1 row updated.SQL> select * from bb;A B--------- ---------C---------------------------------------------------------------------------12-DEC-85 01-DEC-84+000000376-00-- 直接将相减的天变成年了, 因为我指定变成年的SQL> select a-b, c from bb;A-B----------C---------------------------------------------------------------------------376+000000376-00SQL> insert into bb values(null,null,numtoyminterval(376,'month'));1 row created.SQL> select * from bb;A B C--------- --------- --------------------------------------------12-DEC-85 01-DEC-84 +000000376-00+000000031-04SQL> insert into bb values ( null,null, numtoyminterval(999999999,'year'));1 row created.SQL> select * from bb;A B C--------- --------- ---------------------------------------------------------------------12-DEC-85 01-DEC-84 +000000376-00+000000031-04+999999999-00========================<上一个:怎样确定备份集可使用可恢复(笔记)
下一个:oracle自动备份数据命令
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?