如何将 TIMESTAMP 转换为 VARCHAR 并将其保存到 Redshift 中的另一个表中?

Posted

技术标签:

【中文标题】如何将 TIMESTAMP 转换为 VARCHAR 并将其保存到 Redshift 中的另一个表中?【英文标题】:How to convert TIMESTAMP into VARCHAR and save it into another table in Redshift? 【发布时间】:2020-12-15 23:25:20 【问题描述】:

我有一张表,并有一些如下所示的值,

CREATE TABLE school_1__test.tstamp(
    timeofday TIMESTAMP,
    timeofdaytz TIMESTAMP
);

insert into school_1__test.tstamp values('Jun 1,2008  09:59:59', 'Jun 1,2008 09:59:59 EST' );
insert into school_1__test.tstamp values('Dec 31,2008 18:20','Dec 31,2008 18:20');
insert into school_1__test.tstamp values('Jun 1,2008  09:59:59 EST', 'Jun 1,2008 09:59:59');

select * from school_1__test.tstamp;

-----------------------------------------------
     timeofday        |      timeofdaytz
-----------------------------------------------
2008-06-01 09:59:59.0 | 2008-06-01 09:59:59.0
2008-12-31 18:20:00.0 | 2008-12-31 18:20:00.0
2008-06-01 09:59:59.0 | 2008-06-01 09:59:59.0

现在我有另一个如下表,

CREATE TABLE school_1__test.date_test(
    timeofday VARCHAR
);

我想将tstamp 表中的数据插入date_test 表中,并尝试使用以下语句中的每个命令(已注释),

INSERT INTO school_1__test.date_test (
    select to_char(timeofday, 'YYYY-MM-DD HH:MI:SS')
    --select convert(timestamp, timeofday)
    --select cast(timeofday as timestamp)
    --select to_timestamp("timeofday",'YYYY-MM-DD HH:MI:SS')
    --select timeofday::timestamp
    --select to_date(timeofday,'YYYY-MM-DD HH:MI:SS')
    --select convert(varchar, timeofday::timestamp)
    --select convert(varchar, to_timestamp("timeofday",'YYYY-MM-DD HH:MI:SS'))
    from school_1__test.tstamp
);

但是当我看到表格数据时,它只显示DATE 详细信息,找不到TIME 详细信息。

select * from school_1__test.date_test;

----------
timeofday
----------
2008-06-01
2008-06-01
2008-12-31

在转换之前,我检查了每个SELECT 语句,它显示了正确的输出。

select to_char(timeofday, 'YYYY-MM-DD HH:MI:SSTZ')
--select convert(timestamp, timeofday)
--select cast(timeofday as timestamp)
--select to_timestamp("timeofday",'YYYY-MM-DD HH:MI:SS')
--select timeofday::timestamp
--select to_date(timeofday,'YYYY-MM-DD HH:MI:SS')
--select convert(varchar, timeofday::timestamp)
--select convert(varchar, to_timestamp("timeofday",'YYYY-MM-DD HH:MI:SS'))
from school_1__test.tstamp

-------------------
      to_char
-------------------
2008-06-01 09:59:59
2008-12-31 06:20:00
2008-06-01 09:59:59

我检查了How to Insert TIMESTAMP Column into Redshift 问题,但我在这里没有使用任何COPY 命令以及我自己插入的所有数据,所以从S3 没有得到任何东西。

当使用INSERT 命令时,获得DATETIME 部分的解决方案是什么?

【问题讨论】:

谢谢@Jasen,只需更改即可。但问题和以前一样。 嗯,当我在 postgresql 中尝试它时它正在工作。对我来说,它看起来像一个红移错误。 非常感谢@Jasen 付出的时间和精力,我尝试使用DBeaver。它在 Amazon Redshift 控制台中运行良好,但速度很慢。无论如何,我不会再使用DBeaver。在DBeaver 每次插入数据后都要同步,没用。 【参考方案1】:

使用 Amazon Redshift 控制台中的查询编辑器,我在 Amazon Redshift 中运行良好。

我使用了您的确切命令(没有架构名称)。

【讨论】:

非常感谢@john-rotenstein 付出的时间和精力,我尝试使用DBeaver。它在 Amazon Redshift 控制台中运行良好,但速度很慢。无论如何,我不会再使用DBeaver。在DBeaver中每次插入数据后都要同步,没用。 我知道有些SQL客户端会修改结果,导致输出混乱!我喜欢使用 DbVisualizer——它似乎知道那里的每个数据库。

以上是关于如何将 TIMESTAMP 转换为 VARCHAR 并将其保存到 Redshift 中的另一个表中?的主要内容,如果未能解决你的问题,请参考以下文章

将 Varchar 转换为 Snowflake 中的时间戳

postgresql 字符串转date 如下 201610101010 12位varchar 转换为时间类型

将时间戳格式转换为字符的问题

如何将oracle表中的字段由integer 转变为varchar2(50)

如何将现有的 sqlite 表迁移到具有 VARCHAR、TIMESTAMP 等数据类型的 ROOM Db?

在 SQL Server 2008 R2 中将 varchar 转换为时间戳