如何只存储时间;不是日期和时间?

时间:2009-11-23 22:11:40

标签: sql oracle time

在一个字段中,我需要存储的不是日期时间对,即标准的Oracle日期。

01/10/2009 22:10:39

但仅限时间

22:10:39

我认为节省磁盘空间(我有200万行)或提供更快的处理。

5 个答案:

答案 0 :(得分:15)

您可以尝试INTERVAL DAY TO SECOND数据类型,但它不会为您节省任何磁盘空间......但它非常适合此目的。

create table t1 (time_of_day interval day (0) to second(0));

insert into t1 values (TO_DSINTERVAL('0 23:59:59'));

select date '2009-05-13'+time_of_day
from   t1;

11个字节。

答案 1 :(得分:6)

你最好的选择可能是将“午夜以来的秒数”存储为数字字段。

SELECT to_char( SYSDATE, 'SSSSS' ) FROM dual;

答案 2 :(得分:3)

您可以将日期中的时间提取为字符串,如下所示:

to_char(sysdate,'HH.MI.SS')

但是没有时间数据类型可以帮助您节省空间。

答案 3 :(得分:0)

你可以节省几Mb的磁盘空间(现在什么都不是),你的性能几乎没有。

您可以使用NUMBER类型的列来存储自建议午夜以来的秒数,只是不要忘记约束。
(您可能会使用NUMBER(5, 0),它使用1-3个字节,具体取决于存储的值,而不是DATE列使用的常量7个字节)

答案 4 :(得分:0)

你可以使用:

TO_CHAR(<DATE_COLUMN>, '<TIME_FORMAT>');

例如

TO_CHAR(SYSDATE, 'HH24:MI:SS');

您可以在here

中查看时间格式