Трябва да сте запознати с въвеждането на данни във всяка система за управление на база данни. Докато въвеждате данни, може да нямате време и трябва да игнорирате пропуските в данните си или да искате последователна поредица от записи. В тази ситуация PostgreSQL generated_series е приложим за постигане на необходимата цел. Както подсказва името, механизмът на тази функция съдържа 2 или 3 входа. i.д., generated_series ви позволява да генерирате последователност от записи с начална точка, крайна точка и увеличаваща се стойност (по избор). Работи основно върху два типа данни. i.д., Цели числа и времеви клейма. За да се създаде поредица от дати, функцията generiraj_серия се използва по различни начини.
Синтаксис:
>> Генериране на_серии ([старт], [стоп], [по избор стъпка / интервал]);Описанието на синтаксиса на заявката е както следва:
- [старт]: Това е началната точка за генериране на серия.
- [Спри се]: Това показва точката, в която серията ще спре.
- [интервал]: Третата, но незадължителна стойност предполага колко ще нараства поредицата във всяка стъпка. Стойността по подразбиране за интервали е 1.
Нека имаме представа как може да изпълнява функцията 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);
Заключение
Статията, както бе споменато по-горе, обхваща по-голямата част от основните функционалности, свързани с генерирането на серии за създаване на серии от дати. Подробните примери, обсъдени във всеки аспект, са толкова значими, че ще ескалират знанията на съответната ви статия.