Presto 如何使用 Try_Parse
Presto How to use Try_Parse
在 Presto 中,我尝试使用给定的 format 将 String 解析为 Date,但是,如果 String 与格式不匹配,则查询失败。
select date_parse('2020-01-20T16:21:09.346Z', '%Y-%m-%dT%H:%i:%s.%fZ');
我在这里期待的是优雅的处理,所以如果 date_parse 方法失败,它会 return 或者 null 或一些 默认值 提供。
我怎样才能做到这一点?
这 link 解决了问题。
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
在 Presto 中,我尝试使用给定的 format 将 String 解析为 Date,但是,如果 String 与格式不匹配,则查询失败。
select date_parse('2020-01-20T16:21:09.346Z', '%Y-%m-%dT%H:%i:%s.%fZ');
我在这里期待的是优雅的处理,所以如果 date_parse 方法失败,它会 return 或者 null 或一些 默认值 提供。
我怎样才能做到这一点?
这 link 解决了问题。
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