我的日期列格式为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中实现相同。
答案 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;