PostgreSQL

Postgresql Generate_Series na vytvorenie série dátumov

Postgresql Generate_Series na vytvorenie série dátumov

Musíte byť oboznámení so zadávaním údajov v akomkoľvek systéme správy databázy. Pri zadávaní údajov možno nebudete mať čas a budete musieť ignorovať medzery vo svojich údajoch alebo chcieť konzistentnú sériu záznamov. V tejto situácii je PostgreSQL generate_series použiteľný na dosiahnutie požadovaného cieľa. Ako naznačuje názov, mechanizmus tejto funkcie obsahuje buď 2 alebo 3 vstupy. i.e., generate_series umožňuje generovať postupnosť záznamov s počiatočným bodom, konečným bodom a zvyšujúcou sa hodnotou (voliteľné). Funguje hlavne na dvoch dátových typoch. i.e., Celé čísla a časové pečiatky. Na vytvorenie postupnosti dátumov sa funkcia generate_series využíva rôznymi spôsobmi.

Syntax:

>> Generate_series ([start], [stop], [optional step / interval]);

Popis syntaxe dotazu je nasledovný:

Poďme si urobiť predstavu o tom, ako môže fungovať funkcia generate_series (). Ďalej uvádzame niekoľko základných príkladov. Aby sme pochopili koncept tejto funkcie, musíme si nainštalovať a otvoriť shell príkazového riadku postgreSQL (psql).

Po úspešnej konfigurácii a poskytnutí localhost, názvu databázy, čísla portu a hesla môžeme prejsť ľubovoľným dotazom na psql.

Príklad 01: Generate_series pomocou operátora DATE plus celé číslo

Nasledujúci dopyt obsahuje zabudovanú funkciu „DATE“ na načítanie aktuálneho dátumu. Zatiaľ čo „a“ je poskytovaný prevádzkovateľom. Funkciou tohto operátora je pridať toto konkrétne číslo (interval) do dennej časti dátumu. Alebo inými slovami, s konkrétnymi intervalmi sa dni posúvajú a zobrazujú v dátume. Na výstupe bude každý deň pridaný interval „9“, t.j.e., 9 + 9 = 18, potom 27 atď., Kým sa nedosiahne súčet 40.

>> SELECT current_DATE + s.a AS dátumy FROM Generate_series (0,40,9) AS s (a);

Príklad 02: Použitie aktuálneho dátumu na vygenerovanie série dátumov

Na generovanie časových radov s pomocou aktuálneho dátumu používame funkciu now (), ktorá zo systému automaticky preberá aktuálny dátum. Môžete vidieť, že zodpovedajúci výstup zobrazuje dátum až 4 dni. Je to preto, že sme obmedzili vykonávanie pridaním 4 dní k aktuálnemu dátumu. Pretože sme poskytli čas v intervale do 1 dňa, bude sa každý dátum zvyšovať o 1 pridanie za deň

>> select * from generate_series (now (), now () + '4 days', '1 day');

Príklad 03: Generovanie radov dátumov pomocou časových pečiatok

Časové pečiatky hodín: Táto funkcia tiež používa dátový typ časových značiek. Časová pečiatka je v podstate sled znakov, ktoré poskytujú čas a dátum súvisiaceho dňa. Zodpovedajúca funkcia uľahčuje používateľovi zadávanie dátumov medzi oboma dátumami, ktoré sme v dotaze očakávali. Získa sa zoznam časových pečiatok od dátumu 7 do 11 s jednou časovou značkou každých 5 hodín.

>> select * from generate_series ('2021-3-7 00:00' :: timestamp, '2021-3-11 12:00', '5 hours');

Dotaz, ako je uvedený vyššie, sa tiež používa na pridanie minút a sekúnd s hodinami na získanie lepšej časovej pečiatky medzi dňami príslušnej časovej pečiatky.

Časové pečiatky dní: V uvedenom príklade sme videli, že časová značka sa používa na zobrazenie dátumov medzi dvoma príslušnými dátumami, ktoré sme poskytli so zmenou v hodinách zvýšenou o 5. V aktuálnom príklade uvidíme časovú značku v dňoch. Dni sa zvyšujú o 2, pretože sme iniciovali dvojdňovú medzeru v konkrétnom produkte.

>> select * from generate_series ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 days');

Príklad 04: Generovanie konkrétnych dátumov mesiaca pomocou date_trunc

Prvý deň v mesiaci

Ak chceme vygenerovať prvý dátum aktuálneho mesiaca, použijeme nižšie uvedený dotaz.Použitá samostatná funkcia je date_trunc, ktorá zredukuje dátum na presnosť.i.e. teraz ()

>> select date_trunc ('month', now ());

      Posledný deň v mesiaci

Rovnaký prístup date_trunc vygeneruje posledný deň v mesiaci.

>> select date_trunc ('month', now ()) + '1 month' :: interval - '1 day' :: interval as end_of_month;

Polovica mesiaca

Stred mesiaca sa získa úpravou v predchádzajúcom dotaze. Na dosiahnutie príslušného cieľa použijeme strednú funkciu. Alebo odrátame 17 dní od posledného.

>> select date_trunc ('month', now ()) + '1 month' :: interval - '17 days ':: interval as mid_of_month;

Príklad 05: Generovanie dátumov pomocou údajov súvisiacich s kalendárom

Tu je príklad použitia údajov kalendára. Spoznáme priestupný rok, t.j.e., celkový počet dní vo februári.„T“ označuje skutočný znamená rok je priestupný rok a pre „f“ je nepravdivý „dow“ predstavuje dni v týždni. Stĺpec Február obsahuje celkový počet dní v mesiaci. „Deň“ označuje Janov prvý deň v roku. Podľa výskumov týždne ISO začínajú od pondelka a prvý týždeň v roku obsahuje 5. január roku.

>> vyberte dátum :: dátum, výpis ('isodow' od dátumu) ako dow, to_char (dátum, 'dy') ako deň, výpis ('iso rok' od dátumu) ako "iso rok", výpis ('týždeň') od dátumu) ako týždeň, výpis („deň“ z (dátum + interval „2 mesiace - 1 deň“)) ako feb, výpis („rok“ od dátumu) ako rok, výpis („deň“ z (dátum + interval) 2 mesiace - 1 deň ')) = 29 ako skok od generate_series (dátum' 2010-01-01 ', dátum' 2020-03-01 ', interval' 1 rok ') ako t (dátum);

Isodow je „ISO“ štandardný deň v týždni. Dotaz sa bude vykonávať od roku 2010 do roku 2020 pri manipulácii s každým mesiacom, týždňom a dňom v roku.

Príklad 06: Generovanie série konkrétnych dátumov a počtu dní v týždni

V tomto dotaze získame dátumy a čísla dní filtrovaním dní v týždni. Číselne zvážime dni v týždni. Napríklad od 0 do 6. Kde 0 je nedeľa a 6 je sobota. V tomto dotaze uvidíte, že sme použili podmienku na prinesenie dátumov a čísel dní, ktoré nie sú v číslach 2 a 5. Napríklad 20. februára bola sobota, takže počet, ktorý sa objavil, je 6.

>> s dňami ako (vyberte dd, extrahujte (DOW z dd) dw z generate_series ('2021-02-20' :: date, '2021-03-05' :: date, '1 day' :: interval) dd ) vyberte * z dní, keď dw nie je v (2,5);

Záver

Tento článok, ako je uvedené vyššie, pokrýva väčšinu základných funkcií týkajúcich sa generovania sérií na vytvorenie dátumových radov. Podrobné príklady diskutované v každom aspekte sú také zmysluplné, že stupňujú vedomosti vášho článku.

Hry Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 vydané minulý mesiac, je šiestym vývojovým vydaním v 1.13.séria x a prináša množstvo vylepšení, najmä používateľského rozhra...
Hry Ako nainštalovať League Of Legends na Ubuntu 14.04
Ako nainštalovať League Of Legends na Ubuntu 14.04
Ak ste fanúšikom League of Legends, potom je to pre vás príležitosť otestovať spustenie League of Legends. Upozorňujeme, že program PlayOnLinux podpor...
Hry Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
Nainštalujte si najnovšiu strategickú hru OpenRA na Ubuntu Linux
OpenRA je herný engine Libre / Free Real Time Strategy, ktorý obnovuje rané hry z Westwoodu, ako napríklad klasické Command & Conquer: Red Alert. Dist...