Amazon redshift 如何将varchar数据类型字段转换为带有红移时区类型字段的时间戳?

Amazon redshift 如何将varchar数据类型字段转换为带有红移时区类型字段的时间戳?,amazon-redshift,timestamp-with-timezone,amazon-redshift-spectrum,Amazon Redshift,Timestamp With Timezone,Amazon Redshift Spectrum,我有一个表,其中时间戳存储为varchar。我需要将其转换为带有时区的时间戳,但每次都会出现无效操作错误 该字段的格式为: 2017-10-30 10:12:34:154 +1100 我尝试了以下方法: 所有人都给出了如下错误: 有人能帮忙吗?To Redshift的To_时区不支持偏移,因此您需要按如下方式对其进行处理: select DATEADD('ms', (SUBSTRING('2017-10-30 10:12:34:154 +1100',21,3 ))::in

我有一个表,其中时间戳存储为varchar。我需要将其转换为带有时区的时间戳,但每次都会出现无效操作错误

该字段的格式为:

2017-10-30 10:12:34:154 +1100
我尝试了以下方法:

所有人都给出了如下错误:


有人能帮忙吗?

To Redshift的To_时区不支持偏移,因此您需要按如下方式对其进行处理:

select DATEADD('ms',
           (SUBSTRING('2017-10-30 10:12:34:154 +1100',21,3 ))::int,
           (SUBSTRING('2017-10-30 10:12:34:154 +1100', 0,20) + SUBSTRING('2017-10-30 10:12:34:154 +1100', 24,6))::timestamp)

为了大家的利益,以下是我解决问题的方法。基本上,问题是带红移时区的时间戳的可接受语法为“2017-10-30 10:12:34.154+1100”,其中毫秒在“.”之后,而不是“:”之后。虽然,我不确定这一点。但这似乎是红移文档中唯一的问题,并且有点绕圈子

substr_替换在我的情况下不起作用,因为日期和时间的长度一直像这两个一样变化-

'2017-10-30 10:12:34:154 +1100' , '2017-10-3 5:12:34:154 +1100'
因此,我拆分了所有三个字段,并在删除毫秒后以正确的语法将它们重新添加,因为我不需要毫秒

(split_part(m.properties_date_time_tz,' ',1)||' '||substring(split_part(m.properties_date_time_tz,' ',2),0,length(split_part(m.properties_date_time_tz,' ',2))-3)||' '||split_part(m.properties_date_time_tz,' ',3))::timestamptz

其中属性日期时间tz的值类似于“2017-10-30 10:12:34:154+1100”

谢谢回复。我收到如下错误:[Amazon]500310无效操作:OF不支持;道歉。请看上面,非常感谢汤姆。你的解决方案帮助我找到了最终的解决方案。
'2017-10-30 10:12:34:154 +1100' , '2017-10-3 5:12:34:154 +1100'
(split_part(m.properties_date_time_tz,' ',1)||' '||substring(split_part(m.properties_date_time_tz,' ',2),0,length(split_part(m.properties_date_time_tz,' ',2))-3)||' '||split_part(m.properties_date_time_tz,' ',3))::timestamptz