Здравствуйте, Аноним, Вы писали:
А>короче говоря "заполнить" пробелы.
А>Заранее спасибо.
Если используете SQL Server, то можно попробовать вот так:
DECLARE @intervals TABLE (Id INT, DateFrom DATETIME, DateTo DATETIME)
INSERT INTO @intervals VALUES (1, '2011-01-20', '2011-01-25');
INSERT INTO @intervals VALUES (2, '2011-02-10', '2011-02-23');
WITH t(Id, [Date]) AS
(
SELECT Id, DateFrom FROM @intervals
UNION ALL
SELECT t.Id, DATEADD(d, 1, [Date])
FROM t
JOIN @intervals i ON i.Id = t.Id
WHERE t.[Date] < i.DateTo
)
SELECT * FROM t
ORDER BY 2
Re[2]: Как "растянуть" после Select
От:
Аноним
Дата:
19.10.11 18:53
Оценка:
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, Аноним, Вы писали:
А>>короче говоря "заполнить" пробелы.
А>>Заранее спасибо.
L>Если используете SQL Server, то можно попробовать вот так:
L>
L>DECLARE @intervals TABLE (Id INT, DateFrom DATETIME, DateTo DATETIME)
L>INSERT INTO @intervals VALUES (1, '2011-01-20', '2011-01-25');
L>INSERT INTO @intervals VALUES (2, '2011-02-10', '2011-02-23');
L>WITH t(Id, [Date]) AS
L>(
L> SELECT Id, DateFrom FROM @intervals
L> UNION ALL
L> SELECT t.Id, DATEADD(d, 1, [Date])
L> FROM t
L> JOIN @intervals i ON i.Id = t.Id
L> WHERE t.[Date] < i.DateTo
L>)
L>SELECT * FROM t
L>ORDER BY 2
L>
Супер, мегамозг! Знаю что надо рекурсию использовать но никак не могу постичь я этот оператор ;with
SELECT t.ID, t.date_from + LEVEL - 1 AS d
FROM (SELECT 1 AS ID, TO_DATE ('20.10.2011', 'dd.mm.yyyy') AS date_from,
TO_DATE ('25.10.2011', 'dd.mm.yyyy') AS date_to
FROM DUAL) t
CONNECT BY LEVEL <= t.date_to - t.date_from + 1