Существует большая таблица, содержащая, среди прочего, следующие поля: ID, фактическая_дата, истечение_даты.
expiration_date - datetime20. формат и может быть NULL
Я пытаюсь извлечь строки, срок действия которых истекает после 31 декабря 2014 г. или не истекает (NULL).
Добавление следующего оператора where в запрос sql proc не дает мне результатов
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
input
; вы можете использовать константы даты."31DEC2014"d
- это константа даты, которая непосредственно представляет дату. Во-вторых, было бы полезно увидеть значения дляvalue
иthreshold
. В-третьих, что произойдет, если вы перенесете данные в SAS (с выбором), а затем примените тот же фильтр? Возможно, что-то неправильно переведено в сквозном запросе. - person Joe   schedule 18.04.2017libname
для подключения, попробуйте добавитьDIRECT_SQL=NONE
к имени библиотеки (см. support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/) и посмотрите, исправит ли это ситуацию - если да, опубликуйте назад, и я дам вам ответ. - person Joe   schedule 18.04.2017