java - Oracle 10g 中使用哪种数据类型来存储 DateTime?

标签 java oracle oracle10g

Oracle 10g数据库中用什么数据类型来存储日期时间(既有日期也有时间)?我读过一些地方(可能是错误的)“Oracle 10g 中的日期数据类型可以存储日期时间”,但是当我尝试这样做时,事情似乎并没有发生。

The DATE datatype is a datetime datatype. It stores a date and a time. The date portion is based on the number of days since January 1, 4712 BC. The time portion is based on the number of seconds since mid-night. 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 吗?

最佳答案

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;

关于java - Oracle 10g 中使用哪种数据类型来存储 DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11875750/

相关文章:

Oracle PL/SQL 查询嵌套表集合和值键名

Java - Swing Layout + AWT - 如何在使用布局定位的 JPanel 中绘制一条线?

java - Java 中的每个类和包在 Android 中也可用吗?

java - 如果缺少类依赖项,我如何确定缺少哪个类?

oracle - 如何使用 sqlplus 作为 sysdba 连接到不同的 oracle 实例?

Oracle 将 Select Union All 转换为 Parallel Select

oracle - 如何将 Oracle DBMS_ADVANCED_REWRITE 与绑定(bind)变量一起使用?

java - 阻止零件可拆卸

mysql - ORA-02070 : database [MySQL] does not support subqueries in this context. - 甲骨文

oracle - xml选择查询oracle