Oracle中的INTERVAL数据类型详解

NTERVAL YEAR TO MONTH数据类型 Oracle语法: INTERVAL integer [- integer] {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}] 该数据类型常用来表示一段时间差, 注意时间差只精确到年和月. precision为年或月的精确域, 有效范围是0到9, 默认值为2. eg: INTER

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

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

INTERVAL YEAR TO MONTH类型2个TIMESTAMP类型的时间差别。内部类型是182,长度是5。其中4个字节存储年份差异,存储的时候在差异上加了一个0X80000000的偏移量。一个字节存储月份的差异,这个差异加了60的偏移量。

SQL> ALTER TABLE TestTimeStamp ADD E INTERVAL YEAR TO MONTH;
SQL> update testTimeStamp set e=(select interval ‘5’ year + interval ’10’ month year  from dual);

已更新3行。

SQL> commit;
提交完成。

SQL> select dump(e,16) from testTimeStamp;

DUMP(E,16)
———————————————
Typ=182 Len=5: 80,0,0,5,46
Typ=182 Len=5: 80,0,0,5,46
Typ=182 Len=5: 80,0,0,5,46

年:0X80000005-0X80000000=5
月:0x46-60=10

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值的范围是0到9, 默认是2. time_expr的格式为:HH[:MI[:SS[.n]]] or MI[:SS[.n]] or SS[.n], n表示微秒.
该类型与INTERVAL YEAR TO MONTH有很多相似的地方,建议先看INTERVAL YEAR TO MONTH再看该文.

范围值:
HOUR:    0 to 23
MINUTE: 0 to 59
SECOND: 0 to 59.999999999

eg:
INTERVAL ‘4 5:12:10.222’ DAY TO SECOND(3)
表示: 4天5小时12分10.222秒

INTERVAL ‘4 5:12’ DAY TO MINUTE
表示: 4天5小时12分

INTERVAL ‘400 5’ DAY(3) TO HOUR
表示: 400天5小时, 400为3为精度,所以”DAY(3)”, 注意默认值为2.

INTERVAL ‘400’ DAY(3)
表示: 400天

INTERVAL ’11:12:10.2222222′ HOUR TO SECOND(7)
表示: 11小时12分10.2222222秒

INTERVAL ’11:20′ HOUR TO MINUTE
表示: 11小时20分

INTERVAL ’10’ HOUR
表示: 10小时

INTERVAL ’10:22′ MINUTE TO SECOND
表示: 10分22秒

INTERVAL ’10’ MINUTE
表示: 10分

INTERVAL ‘4’ DAY
表示: 4天

INTERVAL ’25’ HOUR
表示: 25小时

INTERVAL ’40’ MINUTE
表示: 40分

INTERVAL ‘120’ HOUR(3)
表示: 120小时

INTERVAL ‘30.12345’ SECOND(2,4)    
表示: 30.1235秒, 因为该地方秒的后面精度设置为4, 要进行四舍五入.

INTERVAL ’20’ DAY – INTERVAL ‘240’ HOUR = INTERVAL ’10-0′ DAY TO SECOND
表示: 20天 – 240小时 = 10天0秒

==================
该部分来源:http://www.Oraclefans.cn/forum/showblog.jsp?rootid=140
INTERVAL DAY TO SECOND类型存储两个TIMESTAMP之间的时间差异,用日期、小时、分钟、秒钟形式表示。该数据类型的内部代码是183,长度位11字节:

l         4个字节表示天数(增加0X80000000偏移量)
l         小时、分钟、秒钟各用一个字节表示(增加60偏移量)
l         4个字节表示秒钟的小时差异(增加0X80000000偏移量)

以下是一个例子:

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

表已更改。

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

已更新3行。

SQL> commit;

提交完成。

SQL> select dump(f,16) from testTimeStamp;

DUMP(F,16)

——————————————————————————–

Typ=183 Len=11: 80,0,0,5,3c,3c,46,80,0,0,0
Typ=183 Len=11: 80,0,0,5,3c,3c,46,80,0,0,0
Typ=183 Len=11: 80,0,0,5,3c,3c,46,80,0,0,0

日期:0X80000005-0X80000000=5

小时:60-60=0
分钟:60-60=0
秒钟:70-60=10
秒钟小数部分:0X80000000-0X80000000=0

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1082850.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WEC世界电竞锦标赛《决胜巅峰》赛事11月在沙特开赛,首次引入女子赛
上一篇 2025年12月2日 20:00:03
使用 CSS 增强表单用户体验:实时反馈技术以实现更好的用户交互
下一篇 2025年12月2日 20:00:22

相关推荐

  • HTML的语法详解

    这次给大家带来html的语法详解,怎么使用html的语法?使用html语法的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是HTML标记语言? HTML是表示网页信息的符号标记语言。 2.HTML的标记和他的属性 1.HTML文档的保存格式:.html、.htm、.xhtml 立即学习“前端…

    用户投稿 2026年5月10日
    000
  • php实现哪些功能

    PHP是一种通用脚本语言,可用来实现广泛的功能,包括:动态Web开发:生成响应用户请求的动态 веб页面。内容管理系统(CMS):构建允许用户管理网站内容的CMS。电子商务:开发具有购物车、订单处理和支付网关集成的电子商务网站。服务器端编程:编写命令行脚本和工具。文件操作:创建、读取、写入和删除文件…

    2026年5月10日
    000
  • CSS常用的一些属性详解

    text-align: center”>CSS常用属性 ☛关于css属性个人建议查看手册更加详细方便,我这里就几种常用属性进行分类并简单取几个常用属性值,仅供跟我一样刚学习前端的人作为入门而用。  1.字体样式 字体的缩写,写法是font:font-style|| font-var…

    用户投稿 2026年5月10日
    000
  • SQL查询:精确判断事件过期,结合日期与时间列

    本文旨在解决数据库中事件过期判断不精确的问题,特别是当事件的过期日期和时间分别存储在不同列时。我们将探讨两种主流的sql查询策略:一种是利用逻辑运算符`or`和`and`进行分情况判断,另一种是通过合并日期和时间列为单一时间戳进行直接比较。文章将详细阐述每种方法的实现方式、适用场景及相关注意事项,确…

    2026年5月10日
    200
  • HTML表单如何实现白名单功能?怎样只允许授权用户?

    要实现%ignore_a_1%的白名单功能并确保只有授权用户操作,核心答案是必须依赖后端服务器进行严格的身份认证、会话管理、授权检查和数据验证,前端仅能提供用户体验层面的初步提示而不能保障安全;具体而言,首先通过用户身份认证(如用户名/密码或oauth)确认用户身份,服务器创建会话并返回标识符,后续…

    2026年5月10日
    800
  • 如何用C#实现数据库的跨平台迁移?使用EF Core工具?

    使用EF Core实现跨平台数据库迁移,需定义实体与DbContext,通过动态配置不同数据库提供程序,利用EF Core CLI生成并应用迁移,结合Fluent API处理数据库差异,确保结构与数据兼容。 要实现数据库的跨平台迁移,C# 中最常用且高效的方式是使用 Entity Framework…

    2026年5月10日
    000
  • Python连接MySQL 5.1:克服旧版认证与字符集兼容性挑战

    本教程详细阐述了如何使用Python 3和mysql.connector库成功连接到老旧的MySQL 5.1数据库。文章重点介绍了解决旧版认证协议和字符集兼容性问题的关键配置,特别是use_pure=True和charset=’utf8’的重要性,并提供了可运行的代码示例。同…

    2026年5月10日
    000
  • 想提升IT技能?哪些含金量高的认证值得考?

    it职业发展:高含金量认证助您成功 想在IT领域提升竞争力?选择合适的认证至关重要。本文推荐几项国内外认可度高的IT认证,助您在职业道路上更进一步。 热门认证推荐: 1. 高级软件设计师(软考高级): 国内IT领域含金量最高的认证之一。涵盖软件工程、项目管理及计算机基础知识。证明您在软件设计和开发方…

    2026年5月10日
    000
  • 什么是资产代币化(Asset Tokenization)?它如何将现实世界资产带入区块链?

    资产代币化是通过区块链将房产、股票等实体资产权益转化为可分割的数字代币。首先选择目标资产并由合规机构确权估值,随后在链上发行对应代币并通过智能合约绑定权益比例,实现自动化分红与转让。为确保真实性,引入第三方审计和去中心化预言机同步链下数据,资金流由托管账户与链上地址联动记录,提升透明度。代币化降低投…

    2026年5月10日
    000
  • 如何高效地在Go中使用http.ResponseWriter构建JSONP响应

    本教程探讨在go语言中高效构建jsonp响应的方法,重点解决如何使用`http.responsewriter`处理回调函数封装。文章通过对比传统字符串拼接与字节切片转换的不足,详细介绍了利用`fmt.fprintf`直接写入和`fmt.sprintf`预格式化两种优化方案,旨在提升代码的简洁性和执行…

    2026年5月10日
    000
  • MySQL、PostgreSQL、SQL Server和Oracle中空字符串、数字0和NULL占用空间有何区别

    不同数据库系统中空字符串、数字0和NULL的存储空间差异 本文比较了MySQL InnoDB、PostgreSQL、SQL Server和Oracle数据库中,空字符串(”)、数字0和NULL值在磁盘上所占用的空间大小。 MySQL InnoDB存储引擎: 整型字段: NULL: 不占用…

    2026年5月10日
    000
  • html文档中含有java怎么运行_html含java运行方法【教程】

    现代浏览器不支持Java Applet,推荐通过JavaScript调用Java后端服务或使用WebAssembly运行Java代码。 如果您在HTML文档中嵌入了Java代码,但发现无法正常运行,这通常是因为现代浏览器不再支持Java小程序(Applet)或相关插件。以下是几种实现HTML中Jav…

    2026年5月10日
    000
  • php主要运用哪些东西

    PHP 是一种通用脚本语言,主要用于 Web 开发,包括创建动态网页、网站框架和内容管理系统。此外,它还支持 Web 服务(RESTful 和 SOAP)、数据库操作、命令行脚本、桌面应用程序和图像处理。 PHP 语言的主要应用 PHP(超文本预处理器)是一种广泛应用的通用脚本语言,主要用于 Web…

    2026年5月10日
    100
  • 不同种类的CSS相对单位

    CSS中的相对单位有很多种类型,每一种都有其适用的场景和特点。下面将介绍常用的相对单位,并提供一些具体的代码示例。 emem是相对于当前元素的font-size大小来计算的单位。例如,如果一个元素的font-size为16px,那么1em就等于16px。如果一个元素的字体大小为2em,那么它的字体大…

    2025年12月24日
    000
  • 静态定位类型的完全指南:深入研究各种静态定位类型

    了解静态定位类型的必备知识:探索静态定位类型包括哪些种类 导语:在人们的日常生活中,定位已经成为不可或缺的一部分。而随着科技的发展和应用的不断拓展,静态定位已经成为一种广泛使用的技术。本文将介绍一些静态定位的基本概念和不同种类的静态定位技术。 一、静态定位的基本概念静态定位是通过使用传感器和相关的技…

    2025年12月24日
    000
  • 深入理解CSS属性选择器并举例说明

    CSS属性选择器详解及应用示例 在CSS中,我们经常需要通过选择器来选取并修改特定的元素样式。除了常见的标签选择器(如div、p等),CSS还提供了属性选择器,可以根据元素的属性值来选择并修改样式。 本文将详细介绍CSS的属性选择器,并给出一些实际应用的示例。 一、属性选择器类型 立即学习“前端免费…

    2025年12月24日
    000
  • css中用什么属性来定义盒的类型

    css中使用display属性来定义盒的类型。display属性规定元素应该生成的框的类型,如【display:inline】,表示元素会被显示为内联元素,元素前后没有换行符。 本文操作环境:windows10系统、css 3、thinkpad t480电脑。 在css中,我们可以使用display…

    2025年12月24日
    000
  • 动态加载css详解

    这次给大家带来动态加载css详解,动态加载css的注意事项有哪些,下面就是实战案例,一起来看一下。 一、方法引用来源和应用 此动态加载css方法 loadCss,剥离自Sea.js,并做了进一步的优化(优化代码后续会进行分析)。 因为公司项目需要用到懒加载来提高网站加载速度,所以将非首屏渲染必需的c…

    用户投稿 2025年12月24日
    000
  • css中px、em和rem使用详解

    相信每位前端工程师们都有这么一个体会,国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢?下面这篇文章小编就来给大家详细介绍关于css中px、em和rem的区别,需要的朋友可以参考借鉴,下面来一起看看吧。 前言 em 和 rem 都是灵活可扩展的单…

    用户投稿 2025年12月24日
    000
  • CSS双飞翼布局的详解

    这次给大家带来CSS双飞翼布局的详解,实现CSS双飞翼布局的注意事项有哪些,下面就是实战案例,一起来看一下。 双飞翼布局,就是两端固定宽高,中间自适应的三栏布局 先来张图,左边和右边的灰色块是固定宽高的,中间绿色的区域是宽高自适应 方式一:通过flex弹性布局来实现 看代码 //HTML结构,p2是…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信