Диапазоны дат в предложении where инструкции SQL proc

Существует большая таблица, содержащая, среди прочего, следующие поля: 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

person Ben    schedule 17.04.2017    source источник
comment
Пара указателей. Вам не нужно использовать здесь input; вы можете использовать константы даты. "31DEC2014"d - это константа даты, которая непосредственно представляет дату. Во-вторых, было бы полезно увидеть значения для value и threshold. В-третьих, что произойдет, если вы перенесете данные в SAS (с выбором), а затем примените тот же фильтр? Возможно, что-то неправильно переведено в сквозном запросе.   -  person Joe    schedule 18.04.2017
comment
Также - я полагаю, вы подключаетесь к SQL Server для выполнения этого запроса? Если да, и вы используете libname для подключения, попробуйте добавить DIRECT_SQL=NONE к имени библиотеки (см. support.sas.com/documentation/cdl/en/acreldb/63647/HTML/default/) и посмотрите, исправит ли это ситуацию - если да, опубликуйте назад, и я дам вам ответ.   -  person Joe    schedule 18.04.2017
comment
Использование 31DEC2014d решило проблему. Мне любопытно, почему.   -  person Ben    schedule 18.04.2017
comment
Функции даты часто плохо переводятся при сквозной передаче.   -  person Joe    schedule 18.04.2017


Ответы (1)


Я бы рекомендовал использовать константу даты ("31DEC2014" d), а не функции даты, либо использовать явную пересылку или отключить неявную пересылку. Функции даты вызывают затруднения при переходе между базами данных, поэтому лучше избегать их, когда это возможно.

person Joe    schedule 18.04.2017