哪个数据类型用于在Oracle 10g中存储DateTime?

时间:2012-08-09 01:59:58

标签: java oracle oracle10g

在Oracle 10g数据库中使用哪种数据类型来存储日期时间(不仅是日期,还包括时间)?我已经阅读了一些内容(可能是错误的)“ Oracle 10g中的日期数据类型可以存储日期时间”但是当我尝试这样做时似乎没有发生。

  

DATE数据类型是datetime数据类型。它存储日期和时间。   日期部分基于自4712年1月1日以来的天数   公元前。时间部分基于此后的秒数   午夜。 The link

我尝试使用Java作为前端,并使用以下SQL直接在Oracle终端上进行。

insert into discount 
values(7, 'Code', 12.5, to_date('11-AUG-2012 06:05:23', 'dd-mon-yyyy hh:mi:ss'), 
to_date('20-AUG-2012 07:50:23', 'dd-mon-yyyy hh:mi:ss'))

它可以工作但是(在这两种情况下)Oracle只是忽略时间部分并只插入SQL中指定的日期而没有任何错误?

在Oracle 10g中使用哪种数据类型存储日期时间?是TimeStamp吗?

2 个答案:

答案 0 :(得分:10)

Oracle中的DATE始终具有日期组件和时间组件。假设DISCOUNT表中的最后两列被声明为DATE,那么Oracle几乎不可能忽略时间组件。

是什么让你相信时间组件被忽略了?我的猜测是你通过运行像

这样的查询来检查数据
SELECT *
  FROM discount

来自SQL * Plus,SQL Developer,TOAD或其他一些GUI。如果这样做,默认情况下,显示的日期将只有一个日期组件而不是时间组件这并不意味着时间组件被丢弃。相反,它是具有不显示时间组件的默认NLS_DATE_FORMAT的结果。您可以通过在查询中执行显式TO_CHAR来强制显示时间组件(请注意,我在猜测列的名称)

SELECT discount_id, 
       discount_type, 
       discount_amt, 
       to_char( discount_start_date, 'MM/DD/YYYY HH24:MI:SS' ),
       to_char( discount_end_date, 'MM/DD/YYYY HH24:MI:SS' )
  FROM discount

或者更改默认NLS_DATE_FORMAT

ALTER SESSION SET nls_date_format = 'MM/DD/YYYY HH24:MI:SS';
SELECT *
  FROM discount;

答案 1 :(得分:4)

Oracle DATE确实包含了时间。来自docs

  

DATE数据类型概述

     

DATE数据类型在a中存储时间点值(日期和时间)   表。 DATE数据类型存储年份(包括世纪),   月,日,小时,分钟和秒(之后   午夜)。

它可能是您使用的欺骗您的工具(SQL Developer,SQL * Plus)。试试

select to_char(your_date, 'dd-mm-yy hh:mi:ss') from discount

另请注意,date数据类型仅存储到秒。 TIMESTAMPTIMESTAMP WITH TIME ZONE更准确。