2014-02-05 2 views
1

Мне нужно создать список с двумя столбцами дневных интервалов за каждый месяц за определенный период. Первый столбец должен быть первым днем ​​месяца, а второй - последним днем ​​месяца.Создать список с первым и последним днем ​​месяца за данный период

Пример: дата
Начало: 2014-01-01
Дата окончания: 2014-06-30

Результат должен быть в двух столбцах:

1. 2014-01-01 | 2014-01-31 
2. 2014-02-01 | 2014-02-28 
3. 2014-03-01 | 2014-03-31 
4. 2014-04-01 | 2014-04-30 
5. 2014-05-01 | 2014-05-31 
6. 2014-06-01 | 2014-06-30 

У меня есть две функции, которые получают первый и последний день из Дата. Я пытаюсь объединить две серии, но не повезло.

select i::date 
from generate_series(first_day('2014-01-01') 
        ,first_day('2014-06-30'), '1 month'::interval) i 

select i::date 
from generate_series(last_day('2014-01-01') 
        ,last_day('2014-06-30'), '1 month'::interval) i 

Вторая функция не показывает последний день правильно, когда она находится в серии.

ответ

1

на основе this answer:

select d::date as start_date,(d + '1 month'::interval - '1 day'::interval)::date end_date 
from generate_series('2014-01-01'::date, '2014-06-30'::date, '1 month'::interval) d 
0

Вы можете даже использовать интервальный выражение в одного:

SELECT d AS mon_first 
     ,d + interval '1 month - 1 day' AS mon_last 
FROM generate_series(date '2014-01-01' 
         ,date '2014-06-30' 
         ,interval '1 month') d

Details for interval input in the manual.