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