在一个字段中,我不需要存储日期时间对,即标准的Oracle日期。如何只存储时间;不是日期和时间?
01/10/2009 22:10:39
但时间只有
22:10:39
我认为节省磁盘空间(我有2万行)或提供更快的处理速度。
在一个字段中,我不需要存储日期时间对,即标准的Oracle日期。如何只存储时间;不是日期和时间?
01/10/2009 22:10:39
但时间只有
22:10:39
我认为节省磁盘空间(我有2万行)或提供更快的处理速度。
你可以尝试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个字节。
您最好的选择可能是将“自午夜以来的秒数”存储为数字字段。
SELECT to_char(SYSDATE, 'SSSSS') FROM dual;
您可以从日期提取时间,像这样的字符串:
to_char(sysdate,'HH.MI.SS')
但没有时间,唯一的数据类型,这将有助于您节省空间。
如果将它作为VARCHAR存储任何东西都可以存储在列中,这在尝试再次取出时不是很有用。 – Ben 2013-02-23 21:19:26
您将节省几Mb的磁盘空间(现在没有什么),并且您在性能上几乎没有任何好处。
您可以使用NUMBER
类型的列来存储建议的自午夜以来的秒数,只是不要忘记约束条件。
(你可能会使用NUMBER(5, 0)
它使用依赖于存储值1-3个字节,而不是由DATE
列使用恒定的7个字节)
检查在事物的宏伟计划,200万行是几乎没有什么。微薄的节省空间是否值得精确度的损失? – kurosch 2009-11-23 22:28:44
我想我应该问的问题是“更快处理什么?”如果你只有一天的时间,你就无法可靠地将它与其他任何东西进行比较,所以你可以不存储任何东西,并保存每行7个字节。 – kurosch 2009-11-23 22:42:19