создать строки таблицы оракула из диапазона дат - PullRequest
0 голосов
/ 27 июня 2018

У меня есть таблица, в которой есть столбец для хранения даты

STARTDATE  |  ENDDATE
01/04/2018 |  05/04/2018
07/04/2018 |  08/04/2018

Я хочу написать простой запрос, который может дать мне результат.

DATE
01/04/2018
02/04/2018
03/04/2018
04/04/2018
05/04/2018
07/04/2018
08/04/2018

это возможно оракулом?

1 Ответ

0 голосов
/ 27 июня 2018

Oracle поддерживает арифметические операции. Итак, sysdate+1 завтра.

Мы можем генерировать строки, используя Иерархический синтаксис Oracle , CONNECT BY. Псевдостолбец LEVEL дает нам необходимый нам прирост.

Хитрая часть работает с несколькими строками таблицы. CONNECT BY сгенерирует продукт, если мы не сможем связать сгенерированные строки с их строками PRIOR. В идеале исходная таблица имеет первичный ключ, который мы можем использовать в качестве якоря; В вашей опубликованной таблице отсутствует один из них, но вместо этого мы можем заменить ROWID.

select startdate + (level-1) as gendate
from t23
connect by level <= (enddate-startdate)+1
            and t23.rowid = prior t23.rowid
            and prior sys_guid() is not null
order by 1

and prior sys_guid() is not null не интуитивно понятен, но он предотвращает ORA-01436: CONNECT BY loop in user data.

Вот демонстрация SQL Fiddle .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...