无法在 Athena 中解析 UTC 日期

Cannot parse UTC date in Athena

我的日期字符串格式为:2019-02-18 09:17:31.260000+00:00,我正在尝试将其转换为 Athena 中的日期。

我尝试按照 SO 答案中的建议转换为时间戳,但失败了。 https://github.com/prestodb/presto/issues/10567 中有讨论,但没有对此特定日期格式的回答。

我尝试了多种格式,例如 'YYYY-MM-dd HH:mm:ss.SSSSSSZ',但没有用,并出现错误,例如 INVALID_FUNCTION_ARGUMENT:格式无效:..在“+00:00”处格式错误。

卡住了一段时间,感谢任何帮助!

Athena 基于非常旧的 Presto 版本,并且没有直接的方法可以通过一些字符串操作技巧来实现。例如,您可以使用 regexp_replace 提取字符串中与时区类型的内置时间戳兼容的部分,然后执行:

SELECT cast(regexp_replace('2019-02-18 09:17:31.260000+00:00','(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\d{3}(.*)', '') AS timestamp with time zone)

Trino (formerly known as PrestoSQL) 的最新版本引入了对最高纳秒精度(12 位小数)的可变精度时间类型的支持。

使用该功能,您只需:

trino> select cast('2019-02-18 09:17:31.260000+00:00' as timestamp(6) with time zone);
             _col0
--------------------------------
 2019-02-18 09:17:31.260000 UTC
(1 row)

Martin Traverso 答案的较短版本是将额外的字符作为子串:

select cast(substr('2019-02-18 09:17:31.260000+00:00',1,23) as timestamp);