Формула для фильтрации дат - PullRequest
0 голосов
/ 25 марта 2019

У меня проблема с моей формулой для выбора даты с использованием PROc SQL в SAS.Что я делаю не так?Спасибо вам всем.С уважением, Джефф

Я использую этот кодер:

FROM
  VTXBUSS.s
WHERE
  t1.ifrs_stage_date_at_start IS ’ 31DEC2017% ’
ORDER BY
  t1.customer_id,

Я получаю обратно синтаксическую ошибку.Даты имеют следующий формат: 31 декабря 2014 года: 00: 00: 00.000000

SAS выдает в виде журнала:

ОШИБКА: значение '' 'n не является допустимым именем SAS.ВНИМАНИЕ: Кажущийся вызов макроса 'не разрешен.45 ГДЕ t1.ifrs_stage_at_start NOT = t1.ifrs_stage_PROV AND t1.ifrs_stage_date_at_start = '31DEC2017%', _ 76 ОШИБКА 22-322: синтаксическая ошибка, ожидание одного из следующих:;,!, !!, &, (, *, *)*, +, -, '.', /, <, <=, <>, =,>,> =, AND, EQ, EQT, EXCEPT, GE, GET, GROUP, GT, GTT, HAVING, INTERSECT, LE, LET, LT, LTT, NE, NET, NOT, OR, ORDER, OUTER, UNION, ^, ^ =, |, ||, ~, ~ =.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Если вы хотите отфильтровать значения DATETIME по тому, какую ДАТУ они представляют, вы можете преобразовать значения в значение DATE.

WHERE datepart(t1.ifrs_stage_date_at_start) = '31DEC2017’d

Или преобразовать в конкретное значение DATETIME

WHERE intnx('dtday',t1.ifrs_stage_date_at_start,0) = '31DEC2017:00:00’dt 

Используйте диапазон значений DATETIME

WHERE t1.ifrs_stage_date_at_start between '31DEC2017:00:00’dt and '01JAN2018:00:00’dt

Или, возможно, преобразуйте в строку символов

WHERE put(t1.ifrs_stage_date_at_start,datetime20.-L) like '31DEC2017:%'
0 голосов
/ 25 марта 2019

Попробуйте это:

FROM
  VTXBUSS.s
WHERE
  t1.ifrs_stage_date_at_start = '31DEC2017'd
ORDER BY
  t1.customer_id,

Если вы ищете конкретную «дату / время», то вам следует использовать, например:

FROM
  VTXBUSS.s
WHERE
  t1.ifrs_stage_date_at_start = '31DEC2017:00:00:00.000000'dt
ORDER BY
  t1.customer_id,

Это потому, что при работес датами в PROC SQL вы должны указать тип данных, которые вы ищете;поставить "d", если DATE или "dt", если DATETIME

...