【问题标题】:How save only time in Redshift HH:MM:SS如何在 Redshift HH:MM:SS 中只节省时间
【发布时间】:2017-06-27 02:05:27
【问题描述】:

将表从 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 中只节省时间。

【问题讨论】:

    标签: mysql datetime time amazon-redshift


    【解决方案1】:

    我强烈建议不要尝试这种冒险。您最终可能会使用一些不兼容的数据类型,例如 string,它实际上可能会帮助您存储时间,但会 灾难性您实际上开始查询您的数据。

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

    在 Redshift 表中,以格式存储整个时间戳

    yyyy-mm-dd hh:mm:ss(使用格式中的任何占位符日期;因为无论如何日期都与您无关)

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

    【讨论】:

      【解决方案2】:

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

      然后您将能够在该字段上运行 date_part。

      例如

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2016-12-22
        • 2017-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多