Oracle SQL Dynami c Дата начала и окончания - PullRequest
1 голос
/ 14 января 2020

Я хочу иметь динамические c Oracle даты начала и окончания SQL, которые будут возвращать начальную дату <= 2019-12-31, когда Sys_Date>> = 16 ноября 2019. Часть YYYY критерии должны увеличиваться на один год, каждое 16 ноября. Например, когда Sys_Date> = 16 ноября 2020 года, запрос будет возвращать записи, имеющие start_date <= 2020-12-31, а 16 ноября 2021 года запрос вернет записи с датой начала <= 2021-12-31. </p>

Я использую Alteryx и инструменты IN-db. Я кратко знаком с этими Oracle функциями, SysDate, To_Date, Trun c, Add_Months и Next_Day.

Существует критерий end_Date, который также необходимо продвигать каждые 16 ноября на один год. По состоянию на сегодня, 13 января 2020 г., текущая возвращаемая конечная дата> = 2019-01-01. 16 ноября 2020 года возвращаемая конечная дата будет> = 2020-01-01.

Для этой работы Oracle SQL требуется ежегодное обновление 16 ноября.

"START_DATE" <= to_date('2019-12-31','yyyy-mm-dd') and "END_DATE" >= to_date('2019-01-01','yyyy-mm-dd')

Ниже приведен успешный код Alteryx с использованием функции DateTimeNow (не Oracle) для получения / выбора / передачи желаемых дат, но это не помогает мне с Oracle SQL.

Ниже приведен код (не Oracle), используемый в приложении Alteryx для запроса определенных дат файла с помощью функции datetimeToday.

([FileDt] > Datetimeformat(DatetimeAdd(DateTimeToday(),-1,"year"),'%Y-01-01')) 
AND    // pass [FileDt] > Jan 1 of current year -1 year
ToDate(DateTimeNow())< ToDate(tostring(DateTimeYear(DateTimeNow()))+"-11-15") 
  //pass files when today is < Nov 15 current year
OR
([FileDt] >= ToDate(tostring(DateTimeYear(DateTimeNow()))+"-01-01") 
AND   // pass [FileDt] >= Jan 1 of current year
ToDate(DateTimeNow())>= ToDate(tostring(DateTimeYear(DateTimeNow()))+"-11-15")) 
  // pass files when today is >= Nov 15 Current Year

1 Ответ

0 голосов
/ 14 января 2020

Может быть что-то вроде этого. Возможно, это не на 100% правильно, но вы должны понять, как это работает.

WHERE start_date <= 
   CASE WHEN TO_NUMBER(TO_CHAR(SYSDATE, 'MMDD')) < 1116 THEN 
      ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 12)-1
   ELSE 
      ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 24)-1
   END
...