0
有一个包含以下其他字段的大表: ID,effective_date,Expiration_date。proc SQL语句的where子句中的日期范围
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.);
然而,当我只选择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
这表明“通过“标签下,所有其他领域是正确的。
这是重复我在SQL Server
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'是一个日期常量,并直接表示日期。其次,看到“value”和“threshold”的值会很有帮助。第三,如果你将数据带入SAS(带有select)然后应用相同的过滤器会发生什么?传递查询中可能有某些内容被错误翻译。 – Joe
另外 - 我假设你连接到SQL Server来运行此查询?如果你是,并且你正在使用'libname'来连接,试着在libname中添加'DIRECT_SQL = NONE'(参见http://support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default /viewer.htm#a002679005.htm),看看是否能解决问题 - 如果是这样的话,我会回答这个问题。 – Joe
使用“31DEC2014”d解决了问题。我很好奇为什么。 – Ben