我只需要oracle中的时间组件,而不是日期组件。创建表时应该使用什么数据类型?

我只需要oracle中的时间组件,而不是日期组件。创建表时应该使用什么数据类型?,oracle,oracle11g,oracle10g,Oracle,Oracle11g,Oracle10g,我想在表中创建一列,用于存储运行作业的时间。此列应使用哪种数据类型?请举例说明。如果需要管理年、月、日、小时、分钟和秒,可以使用日期数据类型。 如果还需要小数秒,则可以使用时间戳数据类型(具有所需的精度) CREATE TABLE T (D1 DATE, T1 TIMESTAMP(9)); -- Default: 6 INSERT INTO T VALUES (SYSDATE, SYSTIMESTAMP); SELECT * FROM T; D1

我想在表中创建一列,用于存储运行作业的时间。此列应使用哪种数据类型?请举例说明。

如果需要管理年、月、日、小时、分钟和秒,可以使用日期数据类型。 如果还需要小数秒,则可以使用时间戳数据类型(具有所需的精度)

CREATE TABLE T
(D1     DATE,
 T1     TIMESTAMP(9));  -- Default: 6

INSERT INTO T
VALUES (SYSDATE, SYSTIMESTAMP);

SELECT *
FROM T;

D1                      T1
-------------------     -------------------------------
02/13/2014 16:03:25     13-FEB-14 04.03.25.772000000 PM
如果您需要时间组件(例如),即使使用日期数据类型,您也可以获得它,使用TO_CHAR函数和您需要的格式掩码:

SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') AS HMS
FROM T;

HMS
--------
10:19:51

可能需要更多关于如何使用此列的信息(使用调度程序运行作业的时间?什么调度程序?如果是cron(或quartz),您可能需要存储cron表达式本身。但我猜您可能需要使用日期(即使您只需要时间组件)。不确定它是否重复,但可能有关联。我计划用c#编写一个自定义计划程序。如果我使用日期数据类型,每次访问它时都需要解析时间组件。因此,我希望以HH:MM:SS格式保存时间,以便运行作业。如果使用
日期
,则可以使用
to_CHAR检索时间部分(,'HH24:MI:SS')
;您暗示这是一个很大的开销,但不确定为什么?您可以将其存储为字符串,但无法验证它是否为有效时间。使用间隔也可以强制执行此操作,但提取起来有点麻烦;或者您可以使用带范围约束的单独的小时、分钟和秒列。或者使用一个值作为numb从午夜开始的秒数,让c#将其转换为时间。使用
日期
忽略日期部分可能是最简单的方法。感谢Corrado的详细回复。我计划用c#编写一个自定义调度程序。如果我使用日期数据类型,每次访问时都需要解析时间组件。因此,我想保存e HH:MM:SS格式的时间,用于运行作业。此外,我希望作业每天都运行。因此,如果列中有日期,则没有意义。嗨,Stany,我用一个示例更新了我的答案,仅从日期数据类型获取时间组件。我不知道这是否是您的问题……:(