PostgreSQL

Postgresql Generate_Series за създаване на серия от дати

Postgresql Generate_Series за създаване на серия от дати

Трябва да сте запознати с въвеждането на данни във всяка система за управление на база данни. Докато въвеждате данни, може да нямате време и трябва да игнорирате пропуските в данните си или да искате последователна поредица от записи. В тази ситуация PostgreSQL generated_series е приложим за постигане на необходимата цел. Както подсказва името, механизмът на тази функция съдържа 2 или 3 входа. i.д., generated_series ви позволява да генерирате последователност от записи с начална точка, крайна точка и увеличаваща се стойност (по избор). Работи основно върху два типа данни. i.д., Цели числа и времеви клейма. За да се създаде поредица от дати, функцията generiraj_серия се използва по различни начини.

Синтаксис:

>> Генериране на_серии ([старт], [стоп], [по избор стъпка / интервал]);

Описанието на синтаксиса на заявката е както следва:

Нека имаме представа как може да изпълнява функцията generiraj_series (). По-долу са дадени някои елементарни примери. За да разберем концепцията на тази функция, трябва да инсталираме и отворим черупката на командния ред на postgreSQL (psql).

След успешна конфигурация и докато предоставяме localhost, име на база данни, номер на порт и парола, можем да преминем през всяка заявка на psql.

Пример 01: Генериране на_серии, използвайки DATE плюс цяло число оператор

Следващата заявка съдържа вградена функция „DATE“ за извличане на текущата дата. Докато „а“ е предоставеният оператор. Функцията на този оператор е да добави точно това число (интервал) в частта от деня на датата. Или с други думи, с определени интервали, дните се изместват и показват в датата. В изхода интервалът „9“ ще се добавя всеки ден, т.е.д., 9 + 9 = 18, след това 27 и така нататък, докато се получи сумата от 40.

>> ИЗБЕРЕТЕ current_DATE + s.a AS датира от Generate_series (0,40,9) AS s (a);

Пример 02: Използване на текуща дата за генериране на поредици от дати

За да генерираме поредици от дати с помощта на текущата дата, използваме функцията now (), която автоматично взема текущата дата от системата. Можете да видите, че съответният изход показва датата до 4 дни. Това е така, защото сме ограничили изпълнението, като сме добавили 4 дни към текущата дата. Както сме осигурили интервал от време до 1 ден, така всяка дата ще бъде увеличена с 1 добавяне в деня

>> изберете * от create_series (сега (), сега () + '4 дни', '1 ден');

Пример 03: Генериране на поредици от дати с помощта на времеви марки

Отпечатване на часове: Тази функция също използва типа данни за времеви марки. Клеймото за време е основно поредица от знаци, които предоставят часа и датата на свързан ден. Съответната функция улеснява потребителя при предоставяне на дати между двете дати, които използвахме, за да очакваме в заявката. Получава се списък с времеви марки от дата 7 до 11 с един времеви печат на всеки 5 часа.

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

Заявката, както бе споменато по-горе, също се използва за добавяне на минути и секунди с часове, за да се получи по-добър времеви отпечатък между дните на съответния времеви отпечатък.

Времеви клейма на дни: В превъзходния пример видяхме, че клеймото за време се използва за показване на дати между двете съответни дати, които сме предоставили с промяната в часове, увеличени с 5. В текущия пример ще видим клеймото за време в дни. Дните се увеличават с 2, тъй като инициирахме двудневна разлика в конкретната продукция.

>> изберете * от create_series ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 дни');

Пример 04: Генериране на конкретни дати от месеца с помощта на date_trunc

Първи ден от месеца

Ако искаме да генерираме първата дата от текущия месец, ще използваме заявката, приложена по-долу.Отделната функция, използвана тук, е date_trunc, която съкращава датата с дадена точност.i.д. сега()

>> изберете date_trunc ('месец', сега ());

      Последен ден от месеца

Същият подход date_trunc ще генерира последния ден от месеца.

>> изберете date_trunc ('месец', сега ()) + '1 месец' :: интервал - '1 ден' :: интервал като end_of_month;

В средата на месеца

Средата на месеца се получава чрез промяна в предишната заявка. Ще използваме средната функция, за да получим съответната цел. Или ще извадим 17 дни от последния.

>> изберете date_trunc ('месец', сега ()) + '1 месец' :: интервал - '17 дни ':: интервал като mid_of_month;

Пример 05: Генериране на дати, като се използват данни, свързани с календара

Ето пример за използване на данни от календара. Ще разберем високосната година, т.е.д., общо дни през месец февруари."T" означава вярно означава, че годината е високосна, а за "f" е невярно, "dow" представлява дните от седмицата. Графата „Февруари“ съдържа общо дни в месеца. „Ден“ означава първия ден на Ян на всяка година. Според изследванията седмиците на ISO започват от понеделник, а първата седмица от годината съдържа 5 януари от годината.

>> изберете дата :: дата, екстракт ('isodow' от дата) като dow, to_char (дата, 'dy') като ден, екстракт ('iso година' от дата) като "iso година", екстракт ('седмица' от дата) като седмица, извлечение („ден“ от (дата + интервал „2 месеца - 1 ден“)) като февруари, извлечение („година“ от дата) като година, извлечение („ден“ от (дата + интервал “ 2 месеца - 1 ден ')) = 29 като скок от create_series (дата' 2010-01-01 ', дата' 2020-03-01 ', интервал' 1 година ') като t (дата);

Isodow е стандартният ден от седмицата „ISO“. Заявката ще се изпълни от 2010 до 2020 г., като манипулира всеки месец, седмица и ден от годината.

Пример 06: Генериране на поредица от конкретни дати и брой дни в седмицата

В тази заявка ще получим дати и номера на дни, като филтрираме дни в седмицата. Ще разгледаме числено дните от седмицата. Например, започвайки от 0 до 6. Където 0 е неделя, а 6 е събота. В тази заявка ще видите, че сме приложили условие за въвеждане на дати и номера на дни, които не са в 2 и 5. Например на 20 февруари беше събота, така че числото, което се появи, е 6.

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

Заключение

Статията, както бе споменато по-горе, обхваща по-голямата част от основните функционалности, свързани с генерирането на серии за създаване на серии от дати. Подробните примери, обсъдени във всеки аспект, са толкова значими, че ще ескалират знанията на съответната ви статия.

Най-добрите дистрибуции на Linux за игри през 2021 г
Операционната система Linux е изминала дълъг път от първоначалния си, прост, базиран на сървъра външен вид. Тази операционна система се подобри неимов...
Как да заснемете и поточно предадете игралната си сесия на Linux
В миналото играта на игри се смяташе само за хоби, но с течение на времето игралната индустрия отбеляза огромен ръст по отношение на технологиите и бр...
Най-добрите игри за игра с ръчно проследяване
Oculus Quest наскоро представи страхотната идея за ръчно проследяване без контролери. С непрекъснато нарастващия брой игри и дейности, които изпълнява...