如何在Redshift中节省时间HH:MM:SS

时间:2017-02-09 07:08:21

标签: mysql datetime time amazon-redshift

将表从MySql导入RedShift,MySql必须是time数据类型的列

+-----------------+-------------+------+-----+---------+----------------+
| Field           | Type        | Null | Key | Default | Extra          |
+-----------------+-------------+------+-----+---------+----------------+
| id              | int(11)     | NO   | PRI | NULL    | auto_increment |
| typecode        | varchar(20) | NO   |     | NULL    |                |
| slot_start_time | time        | NO   |     | NULL    |                |
| slot_end_time   | time        | NO   |     | NULL    |                |
| parent_id       | int(11)     | NO   |     | NULL    |                |
| createdon       | datetime    | NO   |     | NULL    |                |
| modifiedon      | datetime    | NO   |     | NULL    |                |
+-----------------+-------------+------+-----+---------+----------------+

Redshift没有时间数据类型,因为在导入表slot_start_time, slot_end_time列后返回1970-01-01,在这种情况下slot_start_time, slot_end_time显示为Date数据类型

当我ALTER将Redshift中的两列作为时间戳时,它将返回' 01/01/70 HH:MM'

所以我如何才能在RedShift中节省时间。

2 个答案:

答案 0 :(得分:4)

我强烈建议不要尝试这样的冒险。您最终可能会使用某些不兼容的数据类型,例如 string ,这可能实际上只是为了存储时间,但在 灾难性 时会是 灾难性 你真的开始查询你的数据。

在最坏的情况下,如果发现数据类型不兼容,Redshift可能甚至不会填充日期列,并且整个列将填充空值。

在Redshift表中,以

格式存储整个时间戳
  

yyyy-mm-dd hh:mm:ss (使用格式中的任何占位符日期;在任何情况下,日期与您无关)

并使用任何函数在查询表时仅提取时间戳(如下图所示)。

enter image description here

答案 1 :(得分:0)

由于Redshift中没有时间列,您可以使用相同的日期,例如'1970-01-01',然后添加时间。

然后你就可以在该字段上运行date_part。

例如

select extract(hour from timestamp '2010-02-16 20:38:40');
date_part