PostgreSQL

Postgresql Generate_Series для создания ряда дат

Postgresql Generate_Series для создания ряда дат

Вы должны быть знакомы с вводом данных в любой системе управления базами данных. При вводе данных у вас может не быть времени, и вам нужно игнорировать пробелы в данных или требовать некоторой последовательной серии записей. В этой ситуации для достижения требуемой цели применима PostgreSQL generate_series. Как видно из названия, механизм этой функции содержит 2 или 3 входа. я.е., generate_series позволяет вам сгенерировать последовательность записей с начальной точкой, конечной точкой и увеличивающимся значением (необязательно). В основном он работает с двумя типами данных. я.е., Целые числа и отметки времени. Чтобы создать последовательность дат, функция generate_series используется по-разному.

Синтаксис:

>> Generate_series ([начало], [стоп], [необязательно шаг / интервал]);

Описание синтаксиса запроса следующее:

Давайте разберемся, как функция generate_series () может выполнять. Ниже приведены некоторые элементарные примеры. Чтобы понять концепцию этой функции, нам нужно установить и открыть оболочку командной строки postgreSQL (psql).

После успешной настройки и предоставления localhost, имени базы данных, номера порта и пароля мы можем выполнить любой запрос в psql.

Пример 01: Generate_series с использованием оператора DATE плюс целочисленный

Следующий запрос содержит встроенную функцию «ДАТА» для получения текущей даты. В то время как «а» - это оператор, указанный. Функция этого оператора - добавить это конкретное число (интервал) в дневную часть даты. Или другими словами, с определенными интервалами, дни сдвигаются и отображаются в дате. В выходных данных интервал «9» будет добавляться каждый день, i.е., 9 + 9 = 18, затем 27 и так далее, пока не будет достигнута сумма 40.

>> ВЫБРАТЬ current_DATE + s.AS дат FROM Generate_series (0,40,9) AS s (a);

Пример 02: Использование текущей даты для создания ряда дат

Чтобы сгенерировать ряд дат с помощью текущей даты, мы используем функцию now (), которая автоматически берет текущую дату из системы. Вы можете увидеть, что соответствующий вывод показывает дату до 4 дней. Это потому, что мы ограничили выполнение, добавив 4 дня к текущей дате. Поскольку мы предоставили интервал времени до 1 дня, каждая дата будет увеличиваться на 1 добавление в день

>> выберите * из generate_series (now (), now () + '4 дня', '1 день');

Пример 03: Создание ряда дат с использованием меток времени

Метки времени часов: Эта функция также использует тип данных временных меток. Метка времени - это в основном последовательность символов, которые указывают время и дату соответствующего дня. Соответствующая функция помогает пользователю указать даты между обеими датами, которые мы ожидали в запросе. Получен список меток времени от 7 до 11 с одной меткой времени каждые 5 часов.

>> выберите * from generate_series ('2021-3-7 00:00' :: timestamp, '2021-3-11 12:00', '5 часов');

Запрос, как упоминалось выше, также используется для добавления минут и секунд к часам, чтобы получить лучшую временную метку между днями соответствующей временной метки.

Отметки времени дней: В приведенном выше примере мы видели, что временная метка используется для отображения дат между двумя соответствующими датами, которые мы предоставили, с изменением в часах, увеличенном на 5. В текущем примере мы увидим метку времени в днях. Количество дней увеличивается на 2, поскольку мы инициировали двухдневный перерыв в конкретном выпуске.

>> выберите * из generate_series ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 дня');

Пример 04: Генерация определенных дат месяца с помощью date_trunc

Первый день месяца

Если мы хотим сгенерировать первую дату текущего месяца, мы будем использовать запрос, добавленный ниже.Здесь используется отдельная функция date_trunc, которая усекает дату до заданной точности.я.е. сейчас()

>> выберите date_trunc ('месяц', сейчас ());

      Последний день месяца

Тот же подход date_trunc будет генерировать последний день месяца.

>> выберите date_trunc ('month', now ()) + '1 month' :: interval - '1 day' :: interval as end_of_month;

Середина месяца

Середина месяца получается путем изменения в предыдущем запросе. Мы будем использовать функцию среднего для получения соответствующей цели. Или мы вычтем 17 дней из последнего.

>> выберите date_trunc ('month', now ()) + '1 month' :: interval - '17 days ':: interval as mid_of_month;

Пример 05: Создание дат с использованием данных, связанных с календарем

Вот пример использования данных календаря. Мы узнаем високосный год, я.е., всего дней в феврале месяце."T" означает "истина" означает, что год является високосным, а "f" неверно, "dow" представляет дни недели. В столбце «Фев» указано общее количество дней в месяце. «День» обозначает первый день января каждого года. Согласно исследованиям, недели ISO начинаются с понедельника, а первая неделя года включает 5 января года.

>> выберите date :: date, extract ('isodow' from date) как dow, to_char (date, 'dy') как день, extract ('iso year' from date) как "iso year", extract ('week' от даты) в виде недели, извлечение ('день' из (дата + интервал '2 месяца - 1 день')) как фев, извлечение ('год' из даты) в виде года, извлечение ('день' из (дата + интервал ' 2 месяц - 1 день ')) = 29 как переход от generate_series (дата' 2010-01-01 ', дата' 2020-03-01 ', интервал' 1 год ') как t (дата);

Isodow - это стандартный день недели по стандарту ISO. Запрос будет выполняться с 2010 по 2020 год, манипулируя каждым месяцем, неделей и днем ​​года.

Пример 06: Создание серии определенных дат и номеров дней недели

В этом запросе мы будем получать даты и номера дней, фильтруя дни недели. Будем считать дни недели численно. Например, от 0 до 6. Где 0 - воскресенье, а 6 - суббота. В этом запросе вы увидите, что мы применили условие для вывода дат и номеров дней, которых нет в 2 и 5. Например, 20 февраля была суббота, поэтому появилось число 6.

>> с днями как (выберите dd, извлеките (DOW from dd) dw from generate_series ('2021-02-20' :: date, '2021-03-05' :: date, '1 day' :: interval) dd ) выберите * из дней, где dw нет в (2,5);

Заключение

Статья, как упоминалось выше, охватывает большинство основных функций, связанных с генерацией рядов для создания рядов дат. Подробные примеры, обсуждаемые в каждом аспекте, настолько значимы, что расширят знания вашей соответствующей статьи.

Контроль и управление перемещением мыши между несколькими мониторами в Windows 10
Диспетчер мыши с двумя дисплеями позволяет контролировать и настраивать движение мыши между несколькими мониторами, замедляя ее движения возле границы...
WinMouse позволяет настраивать и улучшать движение указателя мыши на ПК с Windows
Если вы хотите улучшить функции указателя мыши по умолчанию, используйте бесплатное ПО WinMouse. Он добавляет дополнительные функции, которые помогут ...
Левая кнопка мыши не работает в Windows 10
Если вы используете выделенную мышь со своим ноутбуком или настольным компьютером, но левая кнопка мыши не работает в Windows 10/8/7 по какой-то причи...