问题描述/异常栈

    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)了

    作者:刘思伟