Временная таблица Oracle по месяцам и годам - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь создать временную таблицу месяца, года, к которой я могу обратиться в расчетах, однако у меня возникают некоторые проблемы.Я не могу создать глобальные временные таблицы из-за ограничений, и мне приходится полагаться на следующий тип запроса.

WITH Months AS
(
SELECT LEVEL -1 AS ID
FROM DUAL
CONNECT BY LEVEL <=264
)
(SELECT 
ROWNUM AS MO_SYS_ID,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'YYYY'||'MM') AS MO_NM,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'MON') AS MO_ABBR_NM,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'MONTH') AS MO_FULL_NM,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'MM')AS MO_NBR,
TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), ID), 'YYYY') AS YR_NBR 
from Months;

Что мне действительно нужно сделать, так это вставить его во временную таблицу, которую я могу вспомнить.У меня нет никаких полей, которые я могу использовать из других таблиц, к сожалению.Мне нужно показать 264 месяца с 1999 года.

Спасибо

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете вычислить столбец даты в выражении таблицы, например:

WITH Months AS (
    SELECT LEVEL -1 AS ID, ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), LEVEL -1) as dt
    FROM DUAL
    CONNECT BY LEVEL <=264
    )
SELECT *
from Months

Если вы пытаетесь создать диапазоны дат, вы можете сделать это:

WITH Months AS (
    SELECT LEVEL -1 AS ID
         , ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), LEVEL -1) as start_dt
         , ADD_MONTHS(TO_DATE('01/01/1999', 'DD/MM/YY'), LEVEL ) as end_dt
    FROM DUAL
    CONNECT BY LEVEL <=264
    )
SELECT *
from yourtable t
inner join Months m on t.somecol >= m.start_dt and  t.somecol < m.end_dt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...