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) 而不是日期函数,或者使用显式直通或禁用隐式直通。在数据库之间切换时,日期函数具有挑战性,因此最好尽可能避免使用它们。
有一个很大的 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) 而不是日期函数,或者使用显式直通或禁用隐式直通。在数据库之间切换时,日期函数具有挑战性,因此最好尽可能避免使用它们。