proc SQL语句的where子句中的日期范围

时间:2017-04-17 21:00:03

标签: sas proc-sql

有一个包含以下其他字段的大表: ID,effective_date,Expiration_date。

expiration_date是datetime20。格式,可以为NULL

我尝试提取2014年12月31日之后过期的行或不过期(NULL)。

在proc sql查询中添加以下where语句不会给我带来任何结果

localHostName

但是,当我只选择NULL到期日期并添加以下字段时:

where coalesce(datepart(expiration_date),input('31/Dec/2020',date11.))
> input('31/Dec/2014',date11.);

它显示'通过'在TAG下,所有其他字段都是正确的。

这是为了复制我在SQL Server中使用的内容

put(coalesce(datepart(expiration_date),input('31/Dec/2020',date11.)),date11.) as value,
put(input('31/Dec/2014',date11.),date11.) as threshold,
case when coalesce(datepart(expiration_date),input('31/Dec/2020',date11.)) > input('31/Dec/2014',date11.) 
    then 'pass' else 'fail' end as tag

使用SAS Enterprise Guide 7.1,在尝试解决问题时,我一直在使用

where isnull(expiration_date,'9999-12-31') > '2014-12-31'

我做错了什么?谢谢。

一些过期日期:

proc sql inobs=100;`

1 个答案:

答案 0 :(得分:2)

我建议使用日期常量(“31DEC2014”d)而不是日期函数,否则使用显式passthrough或禁用隐式passthrough。在数据库之间进行数据时,日期函数具有挑战性,因此在可能的情