получение месячных данных за определенные месяцы на основе SYSDATE - PullRequest
0 голосов
/ 14 декабря 2018

Я запускаю запрос ежемесячно, чтобы выбрать данные на основе месяцев. Январь, Февраль, Март, Апрель, Сентябрь, Октябрь, Ноябрь, Дек.

Допустим, я выполняю этот запрос в ФЕВ.2018, тогда данные JAN и FEB должны поступить с текущего года (2018), а данные за MAR, APR, SEP OCT, NOV, DEC должны быть получены за предыдущий год (2017).Как мне справиться с этим с помощью SYSDATE.

>SELECT * FROM MY_TABLE WHERE MONTH_NAME 
IN ('JAN','FEB','MAR','APR','SEP','OCT','NOV','DEC') 
AND 
YEAR=TO_CHAR(TRUNC(SYSDATE),'YYYY');

Предполагая, что у меня есть столбцы MONTH_NAME со всеми названиями месяцев и YEAR с годом, чтобы соответствовать записи.

1 Ответ

0 голосов
/ 14 декабря 2018

Без примеров данных трудно сказать, что именно вы хотите, но это может быть что-то вроде этого.

SELECT * 
  FROM   my_table 
WHERE  month_name IN ( 'JAN', 'FEB', 'MAR', 'APR', 
                       'SEP', 'OCT', 'NOV', 'DEC' ) 

AND ( 
      ( EXTRACT ( MONTH FROM TO_DATE( month_name ,'MON' ) ) 
                    <= EXTRACT ( MONTH FROM SYSDATE ) AND YEAR = 2018) OR
      ( EXTRACT ( MONTH FROM TO_DATE( month_name ,'MON' ) ) 
                  >  EXTRACT ( MONTH FROM SYSDATE ) AND YEAR = 2017)
    )

Желательно добавить 'NLS_DATE_LANGUAGE = ENGLISH' в качестве третьего аргумента TO_DATE

...