Presto Как использовать Try_Parse - PullRequest
0 голосов
/ 04 февраля 2020

В Presto я пытаюсь проанализировать Строка до Дата с заданным форматом , однако, если строка не соответствует формату, запрос завершается неудачно.

select date_parse('2020-01-20T16:21:09.346Z', '%Y-%m-%dT%H:%i:%s.%fZ');

Здесь я ожидаю изящную обработку, поэтому, если метод date_parse завершится неудачей, он вернет либо null , либо некоторое значение по умолчанию предоставляется.

Как мне этого добиться?

1 Ответ

0 голосов
/ 05 февраля 2020

Эта ссылка решила проблему.

https://cloudjunkie.io/all-articles/2018/3/25/parsing-multiple-date-formats-in-athena#solution

    SELECT TestData.FormatId, 
        Coalesce(
            try(date_parse(TestData.MultiDateCol, '%Y-%m-%d %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%Y/%m/%d %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%Y/%m/%d')),
            try(date_parse(TestData.MultiDateCol, '%d %M %Y')),
            try(date_parse(TestData.MultiDateCol, '%d %M %Y %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%d/%m/%Y %H:%i:%s')),
            try(date_parse(TestData.MultiDateCol, '%d-%m-%Y %H:%i:%s'))
        )  as DateConvertedToTimestamp,
        TestData.MultiDateCol
    FROM
    (
    SELECT '2020-01-01 13:01:01' AS MultiDateCol, 'Format 1' AS FormatId
    UNION ALL
    SELECT '2020/01/02 13:01:02', 'Format 2'
    UNION ALL
    SELECT '2020/01/03', 'Format 3'
    UNION ALL
    SELECT '04 JAN 2020', 'Format 4'
    UNION ALL
    SELECT '05 JAN 2020 13:01:05', 'Format 5'
    UNION ALL
    SELECT '06/01/2020 13:01:06', 'Format 6'
    UNION ALL
    SELECT '07-01-2020 13:01:07', 'Format 7'
    ) AS TestData
    ORDER BY TestData.FormatId
...