原著作者:james koopmann
如果你想在oracle中存储date和时间信息的话,实际上你由两种字段数据类型的选择的话,就让我们看看这两种数据类型的差别和它们提供了些什么。
date数据类型
这个数据类型我们实在是太熟悉了,当我们需要表示日期和时间的话都会想到date类型。它可以存储月,年,日,世纪,时,分和秒。它典型地用来表示什么时候事情已经发生或将要发生。date数据类型的问题在于它表示两个事件发生时间间隔的度量粒度是秒。这个问题将在文章稍后讨论timestamp的时候被解决。可以使用to_char函数把date数据进行传统地包装,达到表示成多种格式的目的。
sql> select to_char(date1,'mm/dd/yyyy hh24:mi:ss') "date" from date_table;
date
---------------------------
06/20/2003 16:55:14
06/26/2003 11:16:36
我见到的大多数人陷入的麻烦就是计算两个时间间的间隔年数、月数、天数、小时数和秒数。你需要明白的是,当你进行两个日期的相减运算的时候,得到的是天数。你需要乘上每天的秒数(1天=86400秒),然后,你可以再次计算得到你想要的间隔数。下面就是我的解决方法,可以精确计算出两个时间的间隔。我明白这个例子可以更简短些,但是我是为了显示所有的数字来强调计算方式。
1 select to_char(date1,'mmddyyyy:hh24:mi:ss') date1,
2 to_char(date2,'mmddyyyy:hh24:mi:ss') date2,
3 trunc(86400*(date2-date1))-
4 60*(trunc((86400*(date2-date1))/60)) seconds,
5 trunc((86400*(date2-date1))/60)-
6 60*(trunc(((86400*(date2-date1))/60)/60)) minutes,
7 trunc(((86400*(date2-date1))/60)/60)-
8 24*(trunc((((86400*(date2-date1))/60)/60)/24)) hours,
9 trunc((((86400*(date2-date1))/60)/60)/24) days,
10 trunc(((((86400*(date2-date1))/60)/60)/24)/7) weeks
11* from date_table
date1 date2 seconds minutes hours days weeks
----------------- ----------------- ---------- ---------- ---------- ---------- ----------
06202003:16:55:14 07082003:11:22:57 43 27 18 17 2
06262003:11:16:36 07082003:11:22:57 21 6 0 12 1
timestamp 数据类型
date数据类型的主要问题是它粒度不能足够区别出两个事件哪个先发生。oracle已经在date数据类型上扩展出来了timestamp数据类型,它包括了所有date数据类型的年月日时分秒的信息,而且包括了小数秒的信息。如果你想把date类型转换成timestamp类型,就使用cast函数。
sql> select cast(date1 as timestamp) "date" from t;
date
-----------------------------------------------------
20-jun-03 04.55.14.000000 pm
26-jun-03 11.16.36.000000 am
正如你看到的,在转换后的时间段尾部有了一段“.000000”。这是因为从date转换过来的时候,没有小数秒的信息,缺省为0。而且显示格式是按照参数nls_timestamp_format定的缺省格式显示。当你把一个表中date类型字段的数据移到另一个表的timestamp类型字段中去的时候,可以直接写insert select语句,oracle会自动为你做转换的。
1 select to_char(time1,'mm/dd/yyyy hh24:mi:ss') "date" from date_table
date
-------------------
06/20/2003 16:55:14
06/26/2003 11:16:36
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器