避免在Redshift上仅向datetime字段提供时间时使用的默认日期值

时间:2014-01-17 08:04:29

标签: amazon-redshift

我创建了一个日期时间字段为“dt”的表。使用COPY命令加载数据。来自文件的字段的对应值仅是小时信息,即比如14:50:00。因此,存储的值是1900-01-01 14:50:00。我不需要日期部分。怎么做。

或者可以是只能存储时间的备用数据类型。

1 个答案:

答案 0 :(得分:0)

Amazon Redshift仅支持日期(年月日)和时间戳(年月日小时秒)格式,并且不支持Postgresql的时间(小时秒)格式。

在我的想法中,有两种方法可以解决。

  • 如@Damien_The_Unbeliever所述,请忽略时间戳格式的日期部分。
create table date_test(id int, timestamp timestamp);
insert into date_test2 values (1, '1900-01-01 14:50:00');
insert into date_test2 values (2, '1900-01-01 17:20:00'); 
select * from date_test2 where timestamp > '1900-01-01 14:50:00'; 
select * from date_test where date_test.timestamp > '1900-01-01 14:50:00';
 id |      timestamp
----+---------------------
  2 | 1900-01-01 17:20:00
(1 row) 
  • 使用char或varchar类型存储时间值。
create table date_test2(id int, timestamp char(8));
insert into date_test2 values (1, '14:50:00');
insert into date_test2 values (2, '17:20:00');
select * from date_test2 where timestamp > '14:50:00';
 id | timestamp
----+-----------
  2 | 17:20:00
(1 row) 

第二种解决方案看起来更容易,但正如Redshift doc所说,性能更差。如果存储大量数据,则应考虑第一个数据。

以下是有关日期/时间列的文档的相关链接。