首页 > 解决方案 > 如何在 Oracle 数据库中插入日期和时间?

问题描述

我的 TRANSACTION 表中有一个名为 TxDate 的列和另一个名为 TxTime 的列。我无法理解 TO_DATE 函数的工作原理。从我所做的研究来看,以下陈述看起来是正确的。有人可以帮助我了解如何在 Oracle 中添加日期和时间。干杯

INSERT INTO TRANSACTION 
VALUES(
    TxNbr_Seq.nextval, 
    'X', 
    1000001, 
    123.45, 
    TO_DATE('2019/05/1', 'yyyy/mm/dd'), 
    TO_DATE('12:00', 'HR:MI'), 
    '101'
);

标签: sqldatabaseoracledatesql-insert

解决方案


不要将日期和时间组件存储在单独的表中。

首先,Oracle 没有time数据类型:它只有date存储日期和时间组件的数据类型。

其次,以这种方式进行通常效率低下。迟早,您最终会连接日期和时间组件,以便能够执行正确的日期比较。将两者存储在一起要简单得多,如果需要单独显示它们,则使用日期函数。

所以,只需要一列来存储日期和时间,比如txDate,然后:

INSERT INTO TRANSACTION -- better enumerate the target columns here
VALUES(
    TxNbr_Seq.nextval, 
    'X', 
    1000001, 
    123.45, 
    TO_DATE('2019/05/01 12:00', 'yyyy/mm/dd hh24:mi'),
    '101'
);

请注意,Oracle 使用hh24(或hh12,或者hh如果您使用 AM/PM 格式)指定小时格式,而不是hr.

那么如果需要分别显示日期和时间,可以使用日期格式化函数:

to_char(txDate, 'yyyy/mm/dd') txDay,
to_char(txDate, 'hh24:mi'   ) txTime

推荐阅读