如何处理在aws athena的同一列中只有date(%m-%d-%y)和datetime(“%m-%d-%y%h:%i”)记录的列?

bmvo0sr5  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(251)

我正在尝试将字符串类型的日期列转换为日期类型。
我在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种格式。

cxfofazt

cxfofazt1#

您可以使用 Coalesce 以及 try .
不同的日期时间格式可以从这个presto文档页面获得。

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 <> ''
d8tt03nd

d8tt03nd2#

我的直觉是当col3喜欢…,修剪定时风格的时间,用正确的第二个arg格式调用日期解析一次时使用case。另外,如果发现更多的异常,可以在更像表达式时使用。

相关问题