INTERVAL YEAR TO MONTH数据类型

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, MONTH

eg: (Oracle Version 9204, RedHat Linux 9.0)
SQL> select numtodsinterval(100,‘DAY‘) from dual;

NUMTODSINTERVAL(100,‘DAY‘)                                                    
---------------------------------------------------------------------------   
+000000100 00:00:00.000000000

SQL> c/DAY/SECOND
1* select numtodsinterval(100,‘SECOND‘) from dual
SQL> /

NUMTODSINTERVAL(100,‘SECOND‘)                                                 
---------------------------------------------------------------------------   
+000000000 00:01:40.000000000

SQL> c/SECOND/MINUTE
1* select numtodsinterval(100,‘MINUTE‘) from dual
SQL> /

NUMTODSINTERVAL(100,‘MINUTE‘)                                                 
---------------------------------------------------------------------------   
+000000000 01:40:00.000000000

SQL> c/MINUTE/HOUR
1* select numtodsinterval(100,‘HOUR‘) from dual
SQL> /

NUMTODSINTERVAL(100,‘HOUR‘)                                                   
---------------------------------------------------------------------------   
+000000004 04:00:00.000000000

SQL> c/HOUR/YEAR
1* select numtodsinterval(100,‘YEAR‘) from dual
SQL> /
select numtodsinterval(100,‘YEAR‘) from dual
                          *
ERROR at line 1:
ORA-01760: illegal argument for function

SQL> select numtoyminterval(100,‘year‘) from dual;

NUMTOYMINTERVAL(100,‘YEAR‘)                                                   
---------------------------------------------------------------------------   
+000000100-00

SQL> c/year/month
1* select numtoyminterval(100,‘month‘) from dual
SQL> /

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-12
1* select to_date(‘1999-01-12‘,‘yyyy-mm-dd‘) - to_date(‘1999-12-01‘,‘yyyy-mm-dd‘) from dual
SQL> /

TO_DATE(‘1999-01-12‘,‘YYYY-MM-DD‘)-TO_DATE(‘1999-12-01‘,‘YYYY-MM-DD‘)         
---------------------------------------------------------------------         
                                                                -323         
-- 也可以为负数的

SQL> c/1999-01-12/2999-10-12
1* select to_date(‘2999-10-12‘,‘yyyy-mm-dd‘) - to_date(‘1999-12-01‘,‘yyyy-mm-dd‘) from dual
SQL> /

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                                                 DATE
B                                                 DATE
C                                                 INTERVAL YEAR(9) TO MONTH

SQL> 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-84                                                           
                                                                              
                                                                               
SQL> 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-00

SQL> 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-04

SQL> 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

感谢 einyboy 转自:http://www.cnblogs.com/einyboy/archive/2012/08/06/2624886.html

时间: 2024-10-11 20:47:11

INTERVAL YEAR TO MONTH数据类型的相关文章

Oracle INTERVAL DAY TO SECOND数据类型

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

使用INTERVAL YEAR TO MONTH类型

Oracle Database 9i数据库引入了一种新特性,可以用来存储时间间隔.时间间隔的例子包括: ● 1年零3个月 ● 25个月 ● -3天5小时16分 ● 1天7小时 ● -56小时 注意: 不要混淆时间间隔与时间值或时间戳的概念.时间间隔记录的是一段时间长度(例如1年零3个月),而时间值或时间戳记录的是一个特定的日期和时间(例如2006年10月28日下午7点32分16秒). 在本书假想的在线商店这个例子中,我们可能想在特定的一段时间内对某种商品打折.例如,可以让顾客使用优惠券,其有效期

创建和管理表【weber出品必属精品】

创建表 必须有 : 1. CREATE TABLE 的权限 SQL> conn /as sysdba 已连接. SQL> create user test default tablespace users identified by a; 用户已创建. SQL> conn test/a ERROR: ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied 警告: 您不再连接到 ORACLE. SQL> co

Oracle计算时间函数(numtodsinterval、numtoyminterval)

numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,表明x的单位,这个函数把x转为interval day to second数据类型 常用的单位有 ('day','hour','minute','second') example SQL> select sysdate,sysdate+numtodsinterval(3,'hour') as res from dual; SYSDATE             RES -------------

PLSQL_基础系列4_时间间隔INTERVAL

2014-12-08 BaoXinjian 一.摘要 INTERVAL数据类型用来存储两个时间戳之间的时间间隔. 可以指定years and months,或者days,hours,minuts,seconds之间的间隔. ORACLE支持两种INTEVAL类型,它们分别是YEAR TO MONTH和DAY TO SECOND. 每个类型都包含leading field和trailing field.主参数定义要被计算的date或者time,副参数定义最小增长量 二.语法 1. Oracle语法

ORACLE基本数据类型总结

1.     字符类型 数据类型 长度 说明 CHAR(n) 默认1字节,n值最大为2000 末尾填充空格以达到指定长度,超过最大长度报错.默认指定长度为字节数,字符长度可以从1字节到四字节. NCHAR(n) 默认1字符,最大存储内容2000字节 末尾填充空格以达到指定长度,n为Unicode字符数.默认为1字节. NVARCHAR2(n) 最大长度必须指定,最大存储内容4000字节 变长类型.n为Unicode字符数 VARCHAR2(n) 最大长度必须指定,至少为1字节或者1字符,n值最大

Oracle数据类型与.NET中的对应关系(转)

Oracle数据类型与.NET中的对应关系 2011-02-24 10:02:16 标签:C# oracletype Oracle 数据类型 .NET Oracle连接添加的引用不同,会存在数据类型不同以及其他一些差别,就工作中遇到的问题暂时总结下. 两种不同的添加引用语句: (1)System.Data.OracleClient; (2)Oracle.DataAccess.Client; Oracle.DataAccess.Type; 采用第二种引用,创建的OracleCommand实例有Ar

1Z0-051-DDL-主要数据库对象和数据类型

1.SQL 经常使用到的对象包括:表.视图.同义词.索引和视图 表(table)以行和列形式存储数据. 视图(view)是存储的SELECT语句,可以像表一样引用它. 同义词(synonym)是表(或视图)的别名. 索引(index)提供一个指向表中某行的确切位置的指针,可以减少对表中行的访问次数. 序列(sequence)是一种生成唯一数字的结构. 2.模式对象命名规则 (1)不能超过30个字符.字符可以是字母.数字.下划线.美元符和井字符号.(database link 可以为128个字符长

Oracle基础-数据类型总结

Oracle提供了22种不同的sql数据类型供我们使用: 1.char : 这是个定长的字符串,会用空格填充来达到其最大长度.char 字段最多可以存储2000字节信息: 2.nchar : 这个一个包含Unicode格式数据的定长字符串.与char类型有所不同,char类型定义的长度可为字节或字符.nchar字段最多可以存储2000字节的信息: 3.varchar2 : 目前这也是varchar的同义词.它是个变长字符串,与char类型不同,它不会用空格将字段或变量填充至最大长度.它最多可以存