验证日期在配置单元中是否有效?

时间:2017-10-25 15:03:45

标签: date hadoop hive hiveql

我的日期列格式为yyyyMMdd。我想检查日期是否有效。 在informatica中,该函数以CASE WHEN IS_DATE(TO_CHAR(DT),'YYYYMMDD') = 0 THEN TO_DATE('99991231','YYYYMMDD') ELSE TO_DATE(TO_CHAR(DT),'YYYYMMDD') END AS EFF_DT

的形式提供

如在hive替代'is_date'功能不可用,如何在hive中实现相同。

2 个答案:

答案 0 :(得分:1)

使用regexp:

case when regexp_extract(date_column,'(19|20)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])',0) = '' 
     then 'not valid date' 
     else 'valid date' 
end

根据您的日期要求编辑正则表达式。

您可以使用宏:

create temporary macro isDate(s string)
case when regexp_extract(s,'(19|20)[0-9]{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])',0) = '' 
         then false 
         else true 
    end;

然后在SQL中使用它:

select * from table where isDate(date_col); 

对于yyyy-MM-dd格式,您可以使用cast(date_col as date)

create temporary macro isDate(s string)
case cast(s as date) is not null then true else false end

答案 1 :(得分:0)

假设您的日期格式为yyyy-MM-dd,即2018-07-20

获取所有无效

Select required_column_name from table_name where cast(date_column_name as date) is NULL; 

获取所有有效

Select required_column_name from table_name where cast(date_column_name as date) is not NULL;