Intereting Posts
Изменение всех нулей (если есть) во всех столбцах (в таблице), чтобы … сказать 1 SQL Server Query для многих для многих отношений – как запросить? Исключение левого соединения с условием не выполняется Медленный простой запрос на обновление базы данных PostgreSQL с 3 миллионами строк postgresql: смещение + ограничение становится очень медленным Выберите имена столбцов, соответствующие критериям (MySQL) Проблема с выпуском Oracle Bulk Collect Ошибка SQL с указанием недопустимого имени столбца, если у меня есть проверка, если она существует. Зачем? выбор столбца на основе минимального значения другого столбца Как работать с одной цитатой в Word VBA SQL-запрос? Выберите записи с порядком позиции IN Вычисленный столбец в неправильном положении при использовании `SELECT *` Постоянное получение контента из базы данных таблиц Как узнать, указывает ли путь фактическому файлу? Таблица Oracle SQL PIVOT

Создавать список с первым и последним днем ​​месяца за данный период

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

Пример:
Дата начала: 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 

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

Основываясь на этом ответе :

 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 

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

 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 

Подробная информация для interval ввода в руководстве.