跳过格式错误的日期解析 presto
Posted
技术标签:
【中文标题】跳过格式错误的日期解析 presto【英文标题】:Skip malformed date parsing presto 【发布时间】:2021-07-20 17:50:19 【问题描述】:我正在使用以下查询来解析 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>
【问题讨论】:
【参考方案1】:使用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;
通过这种方式,您可以尝试解析数据中可能存在的不同格式。
【讨论】:
有时可以放置一个 where 子句来跳过它,但它不会有输出行。根据您的意图,这可能会或可能不会被接受。如果涉及多个表,也可以尝试将子句置于“ON”条件下进行连接。以上是关于跳过格式错误的日期解析 presto的主要内容,如果未能解决你的问题,请参考以下文章