我有一列包含日期作为字符串,但有多种格式,例如 -
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。
假设您正确识别了格式,并且它恰好是“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