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/

相关文章:

java - 软键盘不出现

java - 使用 ArrayList 创建一副纸牌

sql - 代理 key 、合成 key 和人工 key 之间有区别吗?

sql - Oracle中语句的最大长度是多少

java - 在java中缓存数据库数据

java - 数据分页问题: java + oracle sql

java - 如何在 Guice Servlet 中使用 servlet-name 进行过滤器映射?

database - "date"作为列名

oracle - 为什么我会因为触发器创建中的分号而收到 "A sql/plsql compilation error occured."错误?

oracle10g - Oracle 10G - 从 9i 迁移后使用 rownum 的查询停止工作