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

Date ranges in where clause of a proc SQL statement

有一个很大的 table 包含以下其他字段: ID, effective_date, Expiration_date.

expiration_date 是 datetime20。格式,可以为 NULL

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

将以下 where 语句添加到 proc sql 查询中没有得到任何结果

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

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

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

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

这是为了复制我在 SQL 服务器

中使用的内容
where isnull(expiration_date,'9999-12-31') > '2014-12-31'

使用 SAS Enterprise Guide 7.1 并在尝试找出它时我一直在使用

proc sql inobs=100;`

我做错了什么?谢谢。

一些到期日期:

30OCT2015:00:00:00
30OCT2015:00:00:00
29OCT2015:00:00:00
30OCT2015:00:00:00

我建议使用日期常量 ("31DEC2014"d) 而不是日期函数,或者使用显式直通或禁用隐式直通。在数据库之间切换时,日期函数具有挑战性,因此最好尽可能避免使用它们。