在雅典娜中将具有时区偏移的字符串转换为日期时间

Posted

技术标签:

【中文标题】在雅典娜中将具有时区偏移的字符串转换为日期时间【英文标题】:Convert string with time zone offset to datetime in Athena 【发布时间】:2021-11-27 20:41:56 【问题描述】:

mysql 表中有一个 varchar 类型的列,其中包含日期时间数据,例如 '2021-08-17 06:55:22.819-0400' 包含时区偏移信息。

如何在 Athena 的 select 语句中将其转换为 datetime(3)? 基本上是'2021-08-17 06:55:22.819-0400' >>> 2021-08-17 10:55:22.819

【问题讨论】:

您是否正在从 Amazon Athena 查询 MySQL 数据库? 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

如果所有日期都完全采用这种格式,您可以用T 替换空格并使用from_iso8601_timestamp,这将返回timestamp with time zone,然后您可以使用AT TIME ZONE 'UTC' 或只使用timezone 处理时区:

select cast(from_iso8601_timestamp(replace('2021-08-17 06:55:22.819-0400', ' ', 'T')) AS timestamp) 

输出:

_col0
2021-08-17 10:55:22.819

【讨论】:

【参考方案2】:

使用parse_datetime 函数,如下所示:

SELECT parse_datetime('2021-08-17 06:55:22.819-0400', 'yyyy-MM-dd HH:mm:ss.SSSZ')

如果您想将时间转换为 UTC,您可以附加 AT TIME ZONE 'Z',如下所示:

SELECT parse_datetime('2021-08-17 06:55:22.819-0400', 'yyyy-MM-dd HH:mm:ss.SSSZ') AT TIME ZONE 'Z'

【讨论】:

谢谢。有效,但需要在输出结束时删除“UTC”。 你可以使用format_datetime,像这样:format_datetime(parse_datetime(…), 'yyyy-MM-dd HH:mm:ss.SSS'))

以上是关于在雅典娜中将具有时区偏移的字符串转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章

在python中将具有时区缩写的非UTC时间字符串转换为UTC时间,同时考虑夏令时

在JavaScript中将日期转换为另一个时区

列类型 TIMESTAMP 的 BigQuery 导入转换日期时间偏移量/时区,但列类型 DATETIME 失败并显示“无效的日期时间字符串”

将输入字符串日期时间从不同时区转换为UTC

如何在javascript中将日期时间从用户时区转换为EST [重复]

以python格式字符串计算时区偏移量[重复]