Date ranges in where clause of a proc SQL statement
有一个大表,其中包含以下字段:
ID、有效日期、到期日期。
expiration_date 是 datetime20。格式,可以为 NULL
我正在尝试提取在 2014 年 12 月 31 日之后过期或未过期 (NULL) 的行。
将以下 where 语句添加到 proc sql 查询中没有结果
1 2 | where coalesce(datepart(expiration_date),input('31/Dec/2020',date11.)) > input('31/Dec/2014',date11.); |
但是,当我只选择 NULL 到期日期并添加以下字段时:
1 2 3 4 | 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下显示"通过",其他所有字段都正确。
这是为了复制我在 SQL Server 中使用的内容
1 | where isnull(expiration_date,'9999-12-31') > '2014-12-31' |
使用 SAS Enterprise Guide 7.1 并试图弄清楚我一直在使用
1 | proc sql inobs=100;` |
我做错了什么?谢谢。
一些到期日期:
1 2 3 4 | 30OCT2015:00:00:00 30OCT2015:00:00:00 29OCT2015:00:00:00 30OCT2015:00:00:00 |
我建议使用日期常量 ("31DEC2014"d) 而不是日期函数,或者使用显式传递或禁用隐式传递。日期函数在数据库之间传递时具有挑战性,因此最好尽可能避免使用它们。