在Oracle 10g数据库中,使用哪种数据类型来存储日期时间(不仅是日期,而且还有时间)?我读过“Oracle 10g中的日期数据类型可以存储日期时间”(可能是错误的),但是当我尝试这样做时,事情似乎没有发生。
日期数据类型是日期时间数据类型。它存储一个日期和一个时间。日期部分是基于自公元前4712年1月1日以来的天数。时间部分是根据午夜以来的秒数计算的.链接
我使用以下SQL通过Java作为前端并直接在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
吗?
发布于 2012-08-09 02:24:59
甲骨文中的DATE
总是有一个日期组件和一个时间组件。假设DISCOUNT
表中的最后两列被声明为DATE
,那么Oracle完全不可能忽略时间组件。
是什么让你相信时间部分被忽略了?我猜您是通过运行如下所示的查询来检查数据的
SELECT *
FROM discount
来自SQL*Plus、、蟾蜍或其他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;
发布于 2012-08-09 02:25:16
甲骨文DATE
也包括时间。来自文档:
数据类型概述 日期数据类型在表中存储时间点值(日期和时间)。日期数据类型存储年份(包括世纪)、月、日、小时、分钟和秒(午夜之后)。
可能是您使用的工具(,SQL*Plus)欺骗了您。试一试
select to_char(your_date, 'dd-mm-yy hh:mi:ss') from discount
还请注意,日期数据类型只存储到秒。TIMESTAMP
或TIMESTAMP WITH TIME ZONE
更精确。
https://stackoverflow.com/questions/11875750
复制相似问题