如何在 Presto(Athena)中将字符串转换为时间戳?

25

我想把字符串类型的数据转换为时间戳(例如:'2018-03-27T00:20:00.855556Z'),格式为(例如:'2018-03-27 00:20:00')。

实际上,我在 Athena 中执行了查询:

select * from tb_name where elb_status_code like '5%%' AND 
date between DATE_ADD('hour',-2,NOW()) AND NOW(); 

但我遇到了错误:

语法错误:第1行,第100个字符:无法检查varchar是否在timestamp with time zone和timestamp with time zone之间

此查询针对“vf_aws_metrices”数据库运行,除非通过查询合格。 请将错误消息发布在我们的论坛上,或使用查询ID:6b4ae2e1-f890-4b73-85ea-12a650d69278联系客户支持。

原因: 由于日期以字符串格式提供,必须将其转换为时间戳。但我不知道该如何进行转换。

4个回答

34

尝试使用from_iso8601_timestamp。请访问下面的网址了解更多有关时间戳相关功能的信息:https://docs.starburstdata.com/latest/functions/datetime.html

presto:tiny> select from_iso8601_timestamp('2018-03-27T00:20:00.855556Z');
            _col0
-----------------------------
 2018-03-27 00:20:00.855 UTC
(1 row)

我相信你的查询应该是这样的:

select * from tb_name where elb_status_code like '5%%' AND 
from_iso8601_timestamp(date) between DATE_ADD('hour',-2,NOW()) AND NOW(); 

1
当日期时间为字符串类型且包含29/09/2020 20:21格式时,该怎么办? - A l w a y s S u n n y

9

我使用了以下方法,它对我有效。

date_parse(eta,'%Y-%m-%d %h:%i:%s')

请查看下面的文档以获取详细输出。

Presto中的日期时间


这很好,但出于某种原因,Athena不支持Presto的"%i",报告“非法模式组件:i”。%I也是如此。相对较小的问题是该问题使用“T”而不是空格作为日期/时间分隔符。 - Typhlosaurus
我使用了提及函数,但对于闰年并不起作用。date_parse('02/29/1977','%m/%d/%Y') 显示错误。 - Rajesh Qa
@RajeshQa 请参考 PrestoDB 文档处理边缘情况。如果您获得解决方案,请在此处评论。谢谢。 - Dheeraj Inampudi

6

-2
你可以尝试以下代码:
SELECT DATE_FORMAT('2018-03-27T00:20:00.855556Z','%Y-%m-%d %H:%i:%s');

演示


3
仅当输入为 TIMESTAMP 时,此函数才有效,而非 VARCHAR。 - Shailesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接