网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 数据库技术 > Oracle > 开发技术 > Oracle数据库中的时间类数据类型小结-开发技术  

Oracle数据库中的时间类数据类型小结-开发技术

2008-06-17  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

在ORACLE数据库中有一类比较特别的数据类型,它就是时间类的数据类型。这中数据类型表面上看看,像字符型的数据类型,但是又不是。因为他可以像数字型的数据类型那样,进行运算。所以说,他是兼有数字型与字符型数据类型的特点。掌握好时间型的数据类型,是掌握ORACLE数据库设计的一个必须具备的知识。因为在实际的数据库设计中,基本上没没张表都要用到这个数据类型。如信息化管理系统中的单据日期,就是一个时间型的数据类型。

  下面我对ORACLE数据库中的时间型的数据类型(包括日期类的数据类型)的操作技巧做一个小结,希望对大家有所帮助。

中国网管联盟bitsCN.com

  第一个数据类型:DATE数据类型。 网管网www_bitscn_com

  在ORACLE 以前的版本中,关于日期的数据类型就这么一个。可以说,这个DATE数据类型是这个数据库中元老级别的数据类型了。这个数据类型不要光看表面是个日期数据类型,其实,在存储数据的时候,这个数据类型不光是储存现在是几几年几月几号,而会储存几点几分几秒。也就是说,默认情况下,利用DATE函数读取当前日期的话,其存储的格式是存储世纪(就是我们常说的公元)、年、月、日、时、分、秒。

网管下载dl.bitscn.com

  可是在大部分时候,我们不需要这么精确的日期或者时间。我们只需要年、月、日就可以了。该怎么处理呢?此时,我们可以利用Trunc函数来限制。 网管bitscn_com

  另外还要注意两个默认的情况。如果我们在给一个日期型的字段赋值的时候,没有指定具体的时间,也就是说,我们假设字段“当前日期”为一个数据型的日期类型,我们给其赋值为2008年6月12日,则其存储在数据中不是2008年6月12日,而是2008年6月12日午夜00时00分00秒。也就是说,在保存时,数据库会自动把后面时间部分补上,并默认为午夜00时00分00秒。

网管联盟bitsCN_com

  若我们给“当前日期”字段赋值是,只给其具体的时间,而没有给定具体的日期,又会如何呢。如我们给“当前日期”赋值的时候,给的是08时08分08秒。那是哪一天的08时08分08秒呢?默认情况下,不是当天的这个时刻,这要注意,而是当月的第一天的这个时刻。如我们是在6月分处理业务的时候,给予这个值的。我们系统存储的时候,在数据库中存储的就是2008年6月1日08时08分08秒。而不是处理业务的日期。这一点我们在数据库设计的时候要引起充分的重视。

网管论坛bbs_bitsCN_com

  另外,我们要以什么格式来显示时间呢?是日期放在前面还是时间放在前面呢?是用空格来进行区分还是用横杠来进行区分?是用24小时制呢还是采用12小时制?为了实现不同用户自己喜欢的格式来显示日期,数据库系统中提供了一些格式函数,如NTS_DATE_FORMATE函数或者TO_CHAR函数指定一个格式掩码来进行格式的转换。把系统格式转换成我们自己喜欢的格式。

中国网管论坛bbs.bitsCN.com

  第二个数据类型:INTERVAL YEAR TO MOUNTH数据类型。 网管联盟bitsCN@com

  如我们现在想知道,今天(2008年6月12日)离2008年8月8日还有几年几个月?在系统中就是利用这个字段来存储这个值。在官方资料上,对这个字段的解释是用年和月的形式存储一段时间。这个数据类型可以用来存储两个日期/时间之间的差值,只是其精确度不是很高,只会统计两个日期之间相差多少年多少月,而没有具体到日。 网管网www.bitscn.com

  第三个数据类型:INTERVAL DAY TO SECOND数据类型。 中国网管论坛bbs.bitsCN.com

  有时候,我们计算两个日期的差值,若只是具体到月的话,可能还不能满足我们的需求。如现在奥运会的倒计时,就需要精确到具体的日子。在岁末倒计时的时候,我们需要的是精确到秒。所以,此时利用上面哪个数据类型来储存数据,明显精度不够,就要用到这个数据类型了。 网管u家u.bitscn@com

  根据官方文档资料,这个字段是用天、时、分、秒的形式来存储一段时间。也就是说,我们若要知道2008年6月12日08时08分08秒离2008年8月8日8时8分07秒还差几天几分几秒,就需要利用这个字段来存储这个数据。 网管u家u.bitsCN.com

  不过有时候我们也不需要精确到具体的秒,而只要具体的时间。如想知道2008年6月12日离2008年8月8日还差几天,此时没有对应的数据类型来存储这个数据。我们只有先精确到秒,然后再用我们上面讲到的TRUNK割断函数,来取得具体相差的天数。或者利用格式函数来对显示的内容进行格式化,让起忽略后面具体的时间信息,而只精确到天数。 中国网管论坛bbs.bitsCN.com

  在利用这个函数时,要注意,其显示的格式只会是说两个日期还会相差多少天,而不是会相差多少月多少天。若我们要实现这个需求,还是要利用相关的函数来进行转换。或者在存储的时候,直接以字符型的数据类型来进行存储。

网管下载dl.bitscn.com

网管联盟bitsCN@com


TAGs   类型   数据   数据库   时间   日期   这个   我们   函数   系统   需要      
 上一篇:使用Oracle数据库高级复制中最简单的功能-开发技术   下一篇:Oracle的数据段压缩技术-开发技术
Oracle数据库中的时间类数据类型小结-开发技术 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: