如何将 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
命令时,获得DATE
和TIME
部分的解决方案是什么?
【问题讨论】:
谢谢@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 中的另一个表中?的主要内容,如果未能解决你的问题,请参考以下文章
postgresql 字符串转date 如下 201610101010 12位varchar 转换为时间类型
如何将oracle表中的字段由integer 转变为varchar2(50)