Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
Привет всем подскажите как можно сгенерировать строки между двух дат?


что то типа такого только данный запрос не работает... помогите

автор
select
cs1.datevalue + Level - 1
from
table1 cs1,
table2 cs2
where cs1.name = 'date_beg'
and cs2.name = 'date_end'
Connect By Level <=( cs2.datevalue - cs1.datevalue)+1
5 ноя 13, 04:52    [15076632]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Zeratulnn
Member

Откуда:
Сообщений: 85
Axids,

А что Ваш запрос выдает?
5 ноя 13, 06:33    [15076666]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
может что-то он выдаст но это как минимум надо ждать более 5 минут, что меня совсем не устраивает, если использую дуал в результат сразу с месяцем выдает как надо, а когда из таблицы а там данные 01.01.2013 и 31.12.2013 запрос зависает, может что-то с синтаксисом?
5 ноя 13, 06:47    [15076676]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Zeratulnn
Member

Откуда:
Сообщений: 85
Axids,

у тебя там вообще-то CROSS JOIN по таблицам - каждая строка с каждой соединяются. Это правильная логика?
5 ноя 13, 07:09    [15076687]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Zeratulnn
Member

Откуда:
Сообщений: 85
Axids,

where cs1.name = 'date_beg'
and cs2.name = 'date_end'


сколько строк возвращает это условие?
5 ноя 13, 07:16    [15076689]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
одну
к примеру

автор
select
cs1.datevalue, cs2.DATEVALUE --+ Level - 1
from
constlst cs1,
constlst cs2
where cs1.name = 'date_begin'
and cs2.name = 'date_end'
--Connect By Level <=( cs2.datevalue - cs1.datevalue)+1


выдаст одну строку :

'01.10.2013', '31.10.2013'
5 ноя 13, 07:52    [15076714]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Zeratulnn
Member

Откуда:
Сообщений: 85
Axids,

Этот результат выдает 5 минут без connect by?
план запроса надо бы увидеть
5 ноя 13, 07:55    [15076719]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
не он сразу выдает ))))
поле name имеет уникальные значения, т.е. в таблице только одна строка 'date_begin' и одна 'date_end'
5 ноя 13, 07:57    [15076722]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Zeratulnn
Member

Откуда:
Сообщений: 85
Axids,

Попробуйте так
select * from 
(select
cs1.datevalue as a, cs2.DATEVALUE as b --+ Level - 1
from
constlst cs1,
constlst cs2
where cs1.name = 'date_begin'
and cs2.name = 'date_end')e
Connect By Level <=( e.a - e.b)+1;
5 ноя 13, 08:14    [15076754]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
попробовал
5 ноя 13, 09:06    [15076823]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Zeratulnn
Member

Откуда:
Сообщений: 85
Axids,

Ну и? должно быстрее работать. Только * замените на e.a, e.b +level -1
5 ноя 13, 09:15    [15076847]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
Строки не генерит...
5 ноя 13, 09:20    [15076861]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
а ошибку заметил надо так Connect By Level <=( e.b - e.a)+1;

Спасибо большое!!!

А вопрос а почему он в первом случае зависал? кстати еще раз запустил более часа ждал и не дождался
5 ноя 13, 09:22    [15076867]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Zeratulnn
Member

Откуда:
Сообщений: 85
Axids,

Сначала он соединяет по connect by, а уж потом where применяет. Там у вас большая таблица, наверно. И сами представляете, что значит соединить ее с собой n раз
5 ноя 13, 09:26    [15076889]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать строки между двух дат?  [new]
Axids
Member

Откуда:
Сообщений: 235
Спасибо еще раз!
5 ноя 13, 09:32    [15076910]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить