知识大全 oracle中的INTERVAL函数详解

2023-01-29 10:50:39 买帖  | 投诉/举报

篇首语:不怕学不成,就怕心不诚。本文由小编为大家整理,主要介绍了知识大全 oracle中的INTERVAL函数详解相关的知识,希望对你有一定的参考价值。

oracle中的INTERVAL函数详解  以下文字资料是由(全榜网网)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  oracle中的INTERVAL函数详解

  INTERVAL YEAR TO MONTH数据类型

  Oracle语法:

  INTERVAL integer [ integer] YEAR | MONTH [(precision)][TO YEAR | MONTH]

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

  eg:

  INTERVAL YEAR( ) TO MONTH

  表示: 年 个月 YEAR( ) 表示年的精度为 可见 刚好为 为有效数值 如果该处YEAR(n) n< 就会出错 注意默认是

  INTERVAL YEAR( )

  表示: 年 个月

  INTERVAL MONTH( )

  表示: 个月 注意该处MONTH的精度是 啊

  INTERVAL YEAR

  表示: 年 同 INTERVAL YEAR TO MONTH 是一样的

  INTERVAL MONTH

  表示: 个月 同 INTERVAL YEAR TO MONTH 是一样

  INTERVAL YEAR

  表示: 该处表示有错误 精度是 了 但系统默认是 所以该处应该写成 INTERVAL YEAR( ) 或 改成大于 小于等于 的数值都可以的

  INTERVAL YEAR TO MONTH + INTERVAL MONTH =

  INTERVAL YEAR TO MONTH

  表示: 年 个月 + 个月 = 年 个月

  与该类型相关的函数:

  NUMTODSINTERVAL(n interval_unit )

  将n转换成interval_unit所指定的值 interval_unit可以为: DAY HOUR MINUTE SECOND

  注意该函数不可以转换成YEAR和MONTH的

  NUMTOYMINTERVAL(n interval_unit )

  interval_unit可以为: YEAR MONTH

  eg: (Oracle Version RedHat Linux )

  SQL> select numtodsinterval( DAY ) from dual;

  NUMTODSINTERVAL( DAY )

  

  + : :

  SQL> c/DAY/SECOND

   * select numtodsinterval( SECOND ) from dual

  SQL> /

  NUMTODSINTERVAL( SECOND )

  

  + : :

  SQL> c/SECOND/MINUTE

   * select numtodsinterval( MINUTE ) from dual

  SQL> /

  NUMTODSINTERVAL( MINUTE )

  

  + : :

  SQL> c/MINUTE/HOUR

   * select numtodsinterval( HOUR ) from dual

  SQL> /

  NUMTODSINTERVAL( HOUR )

  

  + : :

  SQL> c/HOUR/YEAR

   * select numtodsinterval( YEAR ) from dual

  SQL> /

  select numtodsinterval( YEAR ) from dual

  *

  ERROR at line :

  ORA : illegal argument for function

  SQL> select numtoyminterval( year ) from dual;

  NUMTOYMINTERVAL( YEAR )

  

  +

  SQL> c/year/month

   * select numtoyminterval( month ) from dual

  SQL> /

  NUMTOYMINTERVAL( MONTH )

  

  +

  时间的计算:

  SQL> select to_date( yyyy mm dd ) to_date( yyyy mm dd ) from dual;

  TO_DATE( YYYY MM DD ) TO_DATE( YYYY MM DD )

  

  

   可以相减的结果为天

  SQL> c/ /

   * select to_date( yyyy mm dd ) to_date( yyyy mm dd ) from dual

  SQL> /

  TO_DATE( YYYY MM DD ) TO_DATE( YYYY MM DD )

  

  

   也可以为负数的

  SQL> c/ /

   * select to_date( yyyy mm dd ) to_date( yyyy mm dd ) from dual

  SQL> /

  TO_DATE( YYYY MM DD ) TO_DATE( YYYY MM DD )

  

  

  下面看看INTERVAL YEAR TO MONTH怎么用

  SQL> create table bb(a date b date c interval year( ) to month);

  Table created

  SQL> desc bb;

  Name Null? Type

  

  A DATE

  B DATE

  C INTERVAL YEAR( ) TO MONTH

  SQL> insert into bb values(to_date( yyyy mm dd ) to_date( yyyy mm dd ) null)

   row created

  SQL> select * from bb;

  A B

  

  C

  

   DEC DEC

  SQL> update bb set c = numtoyminterval(a b year );

   row updated

  SQL> select * from bb;

  A B

  

  C

  

   DEC DEC

  +

   直接将相减的天变成年了 因为我指定变成年的

  SQL> select a b c from bb;

  A B

  

  C

  

  

  +

  SQL> insert into bb values(null null numtoyminterval( month ));

   row created

  SQL> select * from bb;

  A B C

  

   DEC DEC +

  +

  SQL> insert into bb values ( null null numtoyminterval( year ));

   row created

  SQL> select * from bb;

  A B C

  

   DEC DEC +

  +

  +

  ========================

  INTERVAL YEAR TO MONTH类型 个TIMESTAMP类型的时间差别 内部类型是 长度是 其中 个字节存储年份差异 存储的时候在差异上加了一个 X 的偏移量 一个字节存储月份的差异 这个差异加了 的偏移量

  SQL> ALTER TABLE TestTimeStamp ADD E INTERVAL YEAR TO MONTH;

  SQL> update testTimeStamp set e=(select interval year + interval month year from dual);

  已更新 行

  SQL> mit;

  提交完成

  SQL> select dump(e ) from testTimeStamp;

  DUMP(E )

  

  Typ= Len= :

  Typ= Len= :

  Typ= Len= :

  年 X X =

  月 x =

  INTERVAL DAY TO SECOND数据类型

  Oracle语法:

  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) ] ]

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

  该类型与INTERVAL YEAR TO MONTH有很多相似的地方 建议先看INTERVAL YEAR TO MONTH再看该文

  范围值:

  HOUR: to

  MINUTE: to

  SECOND: to

  eg:

  INTERVAL : : DAY TO SECOND( )

  表示: 天 小时 分 秒

  INTERVAL : DAY TO MINUTE

  表示: 天 小时 分

  INTERVAL DAY( ) TO HOUR

  表示: 天 小时 为 为精度 所以 DAY( ) 注意默认值为

  INTERVAL DAY( )

  表示: 天

  INTERVAL : : HOUR TO SECOND( )

  表示: 小时 分 秒

  INTERVAL : HOUR TO MINUTE

  表示: 小时 分

  INTERVAL HOUR

  表示: 小时

  INTERVAL : MINUTE TO SECOND

  表示: 分 秒

  INTERVAL MINUTE

  表示: 分

  INTERVAL DAY

  表示: 天

  INTERVAL HOUR

  表示: 小时

  INTERVAL MINUTE

  表示: 分

  INTERVAL HOUR( )

  表示: 小时

  INTERVAL SECOND( )

  表示: 秒 因为该地方秒的后面精度设置为 要进行四舍五入

  INTERVAL DAY INTERVAL HOUR = INTERVAL DAY TO SECOND

  表示: 天 小时 = 天 秒

  ==================

  INTERVAL DAY TO SECOND类型存储两个TIMESTAMP之间的时间差异 用日期 小时 分钟 秒钟形式表示 该数据类型的内部代码是 长度位 字节

  l 个字节表示天数(增加 X 偏移量)

  l 小时 分钟 秒钟各用一个字节表示(增加 偏移量)

  l 个字节表示秒钟的小时差异(增加 X 偏移量)

  以下是一个例子

  SQL> alter table testTimeStamp add f interval day to second ;

  表已更改

  SQL> update testTimeStamp set f=(select interval day + interval second from dual);

  已更新 行

  SQL> mit;

  提交完成

  SQL> select dump(f ) from testTimeStamp;

  DUMP(F )

  

  Typ= Len= : c c

  Typ= Len= : c c

  Typ= Len= : c c

  日期 X X =

  小时 =

  分钟 =

  秒钟 =

lishixinzhi/Article/program/Oracle/201311/16710