1

我正在使用以下查询来解析 presto 中的日期:

SELECT date_parse(t.up_date, '%c/%e/%Y %l:%i:%s %p') from table t

样品日期为:4/11/2021 12:30:00 PM

但有时我们会得到不是不能解析"testdate"的日期(任何不是日期的字符串)

如何在查询中跳过此类日期?我的查询应如下所示:

   select date_parse(t.up_date, '%c/%e/%Y %l:%i:%s %p') 
     from table t 
    where <skip the date that does not parse>
4

1 回答 1

3

使用try(). 通常date_parse()在错误的日期格式上失败。如果添加try(),它将NULL为错误的日期生成 s,您可以像这样过滤 NULL 记录:

select try(date_parse(t.up_date, '%c/%e/%Y %l:%i:%s %p'))
  from table t 
  --filter rows wich can not be parsed if necessary
 where try(date_parse(t.up_date, '%c/%e/%Y %l:%i:%s %p')) is not NULL

您也可以尝试使用 coalesce() 解析不同的格式以选择成功解析:

select
      coalesce( try(date_parse(t.up_date, '%c/%e/%Y %l:%i:%s %p')), --try format1
                try(date_parse(t.up_date, '%Y/%m/%d'))  --try format2
              )
 from table t 
where --filter only parsed dates
     coalesce( try(date_parse(t.up_date, '%c/%e/%Y %l:%i:%s %p')), --try format1
               try(date_parse(t.up_date, '%Y/%m/%d'))  --try format2
              ) is not NULL;

通过这种方式,您可以尝试解析数据中可能存在的不同格式。

于 2021-04-27T13:29:09.157 回答