在 hive 中读取奇怪的日期格式

问题描述 投票:0回答:1

我有一列包含日期作为字符串,但有多种格式,例如 -

dd/MM/yy
dd/MMM/yyy
.. 等。我使用以下代码将所有字符串转换为一种特定的日期格式(
yyyy-MM-dd
)蜂巢:

select 
      from_unixtime(unix_timestamp('31/02/2021','dd/MM/yyyy'),'yyyy-MM-dd')

但这给了我 2021-03-03 在 HIVE 中。

是否有其他方法可以识别此类无效日期并给出 null。

sql date apache-spark-sql hive format
1个回答
1
投票

假设您正确识别了格式,并且它恰好是“dd/MM/yyyy”,并且日期无效“31/02/2021”。

在这种情况下,unix_timestamp 函数会将日期移至下个月,并且无法更改其行为。但是您可以检查从原始字符串双重转换为时间戳并返回原始格式的日期是否相同。如果不相同,则日期无效。

case -- check double-converted date is the same as original string when from_unixtime(unix_timestamp(date_col,'dd/MM/yyyy'),'dd/MM/yyyy') = date_col --convert to yyyy-MM-dd if the date is valid then from_unixtime(unix_timestamp('31/02/2021','dd/MM/yyyy'),'yyyy-MM-dd') else null -- null if invalid date end as date_converted
    
© www.soinside.com 2019 - 2024. All rights reserved.