数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle中的INTERVAL函数详解


发布日期:2023年01月31日
 
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(yyyymmdd) to_date(yyyymmdd) from dual;

TO_DATE(YYYYMMDD)TO_DATE(YYYYMMDD)

可以相减的结果为天

SQL> c//

* select to_date(yyyymmdd) to_date(yyyymmdd) from dual

SQL> /

TO_DATE(YYYYMMDD)TO_DATE(YYYYMMDD)

也可以为负数的

SQL> c//

* select to_date(yyyymmdd) to_date(yyyymmdd) from dual

SQL> /

TO_DATE(YYYYMMDD)TO_DATE(YYYYMMDD)

下面看看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( yyyymmdd) to_date(yyyymmdd) null)

row created

SQL> select * from bb;

A B

C

DEC DEC

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

row updated

SQL> select * from bb;

A B

C

DEC DEC

+

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

SQL> select ab c from bb;

AB

C

+

SQL> insert into bb values(nullnullnumtoyminterval(month));

row created

SQL> select * from bb;

A B C

DEC DEC +

+

SQL> insert into bb values ( nullnull 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> commit;

提交完成

SQL> select dump(e) from testTimeStamp;

DUMP(E)

Typ= Len=:

Typ= Len=:

Typ= Len=:

XX=

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> commit;

提交完成

SQL> select dump(f) from testTimeStamp;

DUMP(F)

Typ= Len=: cc

Typ= Len=: cc

Typ= Len=: cc

日期XX=

小时=

分钟=

秒钟=

秒钟小数部分XX=

               

上一篇:oracle升级后exp出现oracle942错误

下一篇:获取或记录Oracle语句的执行时间