【问题标题】:How to deal with a column that has just date (%m-%d-%Y) and datetime ('%m-%d-%Y %H:%i') records in the same column in AWS Athena?如何处理 AWS Athena 中同一列中只有日期 (%m-%d-%Y) 和日期时间 ('%m-%d-%Y %H:%i') 记录的列?
【发布时间】:2020-10-25 21:22:04
【问题描述】:

我正在尝试将字符串类型的日期列转换为日期类型。

我在 AWS Athena 中使用以下查询:

SELECT col0, col1, col2, date_parse(replace(col3, '/', '-'), '%m-%d-%Y') AS start_date
FROM "bucket"."table"
WHERE col3 <> ''

这适用于某些记录,因为某些日期的格式如下:12/08/2019 但其他日期格式如下:7/1/2019 0:06 其他一些日期的格式如下:2020/04/10 08:39

这些不同格式的日期存在于同一列中。在这里处理脏数据......我明白为什么我的查询失败了,因为我只有'%m-%d-%Y' 格式。只是想知道我将如何处理这样的事情,以便它可以在一个查询中处理所有 3 种格式。

【问题讨论】:

    标签: sql amazon-web-services date presto amazon-athena


    【解决方案1】:

    您可以使用Coalescetry 的组合来运行各种组合。

    this presto documentation page 提供各种日期时间格式。

    SELECT
        col0,
        col1,
        col2,
        Coalesce(
            try(date_parse(col3, '%m/%d/%Y')),
            try(date_parse(col3, '%Y/%m/%d %H:%i')),
            try(date_parse(col3, '%e/%c/%Y %k:%i'))
        ) AS start_date
    FROM "bucket"."table"
    WHERE col3 <> ''
    

    【讨论】:

    • 这对我的大部分数据都非常有效。我检查了文档,但没有关于用时区解析某些内容的信息。比如6/12/2020 9:54 AM EDT我尝试了date_parse(replace(example_time, '/', '-'), '%m-%d-%Y %H:%i %p %x'的不同变体
    • 这个格式是否意味着以月-日-年开头,它们是否始终支持两位数?
    • 是的,它是以月-日-年开头的,是的,它们支持两位数。
    【解决方案2】:

    我的直觉是使用 CASE WHEN col3 LIKE ...,修剪定时风味的时间,使用正确的第二个 arg 格式调用一次日期解析。另外,如果你发现更多的异常,你可以使用更多的 LIKE 表达式。

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2018-05-25
      相关资源
      最近更新 更多