问题描述/异常栈

select *  
from  ads_data_product.user_preference_djradio_c1_dd
where 
dt = date_sub('${etl_date}',1)
or dt = add_months(trunc('${etl_date}','MM'), 0)

类似这样的sql查询不出结果,但是单独拿出一个分区是可以的

解决方案

select *  
from  ads_data_product.user_preference_djradio_c1_dd
where 
cast(dt as timestamp) = date_sub('${etl_date}',1)
or cast(dt as timestamp) = add_months(trunc('${etl_date}','MM'), 0)

手动将时间条件,cast成timestamp类型

问题原因

由于dtstring类型,单独是dt = xxxstring = timestamp有个隐式转换可以成立。加了or就变成dt in (xxx1, xxx2)了

作者:刘思伟