【问题标题】:Problem in converting string format into date in Athena在 Athena 中将字符串格式转换为日期的问题
【发布时间】:2020-06-16 17:18:42
【问题描述】:

请求您的帮助,因为一直在尝试解决此问题但无法解决。

我在雅典娜有一列是 string 。我想将该列转换为雅典娜中的时间戳。

我用过查询:

select date_parse(timestamp,'%Y-%m-%dT%H:%i:%s.%fZ') from wqmparquetformat ;

但我收到错误: INVALID_FUNCTION_ARGUMENT:无效格式:“1589832352”在“832352”处格式错误

我已经尝试过所有时间戳格式的 Presto 组合。

当我运行以下查询时:

select to_iso8601(from_unixtime(1589832352));

我收到以下输出:

2020-05-18T20:05:52.000Z

【问题讨论】:

    标签: sql


    【解决方案1】:

    date_parse() 函数需要 (string, format) 作为参数并返回时间戳。所以你需要传递你的字符串,如下所示:

    select date_parse(to_iso8601(from_unixtime(1589832352)),'%Y-%m-%dT%H:%i:%s.%fZ')
    

    这给了我下面的输出

    2020-05-18 20:05:52.000
    

    在您的情况下,您需要传递包含值 1589832352 的列名

    select date_parse(to_iso8601(from_unixtime(timestamp)),'%Y-%m-%dT%H:%i:%s.%fZ')
    

    在您的情况下,您应该将时间戳转换为 double 以使其工作,如下所示:

    select date_parse(to_iso8601(from_unixtime(cast(timestamp as double))),'%Y-%m-%dT%H:%i:%s.%fZ')
    

    在运行良好的查询下测试运行。

    select date_parse(to_iso8601(from_unixtime(cast('1589832352' as double))),'%Y-%m-%dT%H:%i:%s.%fZ')
    

    【讨论】:

    • 我需要在列名表时间戳上而不是在单个条目上执行此操作
    • 我看到您在问题中提到了这个值,我认为这将是您数据中时间戳的格式。您只需在查询中将条目替换为时间戳即可。我已经更新了答案
    • 嗨 - 当我运行上述命令时:选择 date_parse(to_iso8601(from_unixtime(timestamp)),'%Y-%m-%dT%H:%i:%s.%fZ')从 wqmparquetformat 我得到错误:SYNTAX_ERROR: line 1:30: Unexpected parameters (varchar) for function from_unixtime。预期: from_unixtime(double) , from_unixtime(double, bigint, bigint) , from_unixtime(double, varchar(x))
    • 您能确认一下您的时间戳列数据类型吗?
    • 嗨 Prabhakar - 时间戳的数据类型是字符串
    猜你喜欢
    • 2018-02-23
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2013-12-28
    相关资源
    最近更新 更多