PostgreSQL

Postgresql Generate_Series k vytvoření datové řady

Postgresql Generate_Series k vytvoření datové řady

Musíte být obeznámeni se zadáváním údajů v jakémkoli systému správy databáze. Při zadávání dat možná nebudete mít čas a budete muset ignorovat mezery ve svých datech nebo chcete nějakou konzistentní sérii záznamů. V této situaci je PostgreSQL generate_series použitelný k dosažení požadovaného cíle. Jak název napovídá, mechanismus této funkce obsahuje buď 2 nebo 3 vstupy. i.E., generate_series umožňuje generovat posloupnost záznamů s počátečním bodem, koncovým bodem a zvyšující se hodnotou (volitelně). Funguje hlavně na dvou datových typech. i.E., Celá čísla a časová razítka. K vytvoření posloupnosti dat se funkce generate_series používá různými způsoby.

Syntax:

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

Popis syntaxe dotazu je následující:

Pojďme si udělat představu o tom, jak může fungovat funkce generate_series (). Níže uvádíme několik základních příkladů. Abychom pochopili koncept této funkce, musíme nainstalovat a otevřít prostředí příkazového řádku postgreSQL (psql).

Po úspěšné konfiguraci a při zadávání localhost, názvu databáze, čísla portu a hesla můžeme projít libovolným dotazem na psql.

Příklad 01: Generate_series pomocí DATE plus celočíselný operátor

Následující dotaz obsahuje vestavěnou funkci „DATE“ pro načtení aktuálního data. Zatímco „a“ je poskytován provozovatelem. Funkce tohoto operátora spočívá v přidání daného čísla (intervalu) do denní části data. Jinými slovy, ve specifických intervalech jsou dny posunuty a zobrazeny v datu. Na výstupu bude každý den přidán interval „9“, tj.E., 9 + 9 = 18, poté 27 atd., Dokud není dosaženo součtu 40.

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

Příklad 02: Použití aktuálního data ke generování datové řady

Ke generování datových řad s pomocí aktuálního data používáme funkci now (), která automaticky přebírá aktuální datum ze systému. Můžete vidět, že odpovídající výstup ukazuje datum až 4 dny. Je to proto, že jsme omezili provádění přidáním 4 dnů k aktuálnímu datu. Protože jsme zadali časový interval do 1 dne, každé datum bude zvýšeno o 1 přidání za den

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

Příklad 03: Generování řady dat pomocí časových značek

Časová razítka hodin: Tato funkce také používá datový typ časových značek. Časové razítko je v podstatě sled znaků, které poskytují čas a datum souvisejícího dne. Odpovídající funkce usnadňuje uživateli poskytovat data mezi oběma daty, která jsme v dotazu očekávali. Získá se seznam časových razítek od data 7 do 11 s jedním časovým razítkem každých 5 hodin.

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

Dotaz, jak je uvedeno výše, se také používá k přidání minut a sekund s hodinami k získání lepšího časového razítka mezi dny příslušného časového razítka.

Časová razítka dnů: V překračujícím příkladu jsme viděli, že časové razítko se používá k zobrazení dat mezi dvěma příslušnými daty, která jsme poskytli se změnou v hodinách zvýšenou o 5. V aktuálním příkladu uvidíme časové razítko ve dnech. Dny se zvyšují o 2, protože jsme zahájili dvoudenní mezeru v konkrétním výstupu.

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

Příklad 04: Generování konkrétních dat měsíce pomocí date_trunc

První den v měsíci

Pokud chceme vygenerovat první datum aktuálního měsíce, použijeme níže uvedený dotaz.Zde použitá odlišná funkce je date_trunc, která zkrátí datum na danou přesnost.i.E. Nyní()

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

      Poslední den v měsíci

Stejný přístup date_trunc vygeneruje poslední den v měsíci.

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

V polovině měsíce

Polovina měsíce se získá změnou v předchozím dotazu. K dosažení příslušného cíle použijeme střední funkci. Nebo odečteme 17 dní od posledního.

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

Příklad 05: Generování dat pomocí dat souvisejících s kalendářem

Zde je příklad použití dat kalendáře. Poznáme přestupný rok, tj.E., celkem dní v únoru měsíce.„T“ označuje true znamená, že rok je přestupný rok, a pro „f“ platí, že „dow“ představuje dny v týdnu. Sloupec „Únor“ obsahuje celkový počet dní v měsíci. „Den“ označuje Janův první den každého roku. Podle výzkumu začínají týdny ISO od pondělí a první týden v roce obsahuje 5. ledna roku.

>> vyberte datum :: datum, výpis ('isodow' od data) jako dow, to_char (datum, 'dy') jako den, výpis ('iso rok' od data) jako "iso rok", výpis ('týden') od data) jako týden, výpis („den“ z (datum + interval „2 měsíce - 1 den“)) jako únor, výpis („rok“ od data) jako rok, výpis („den“ z (datum + interval „ 2 měsíce - 1 den ')) = 29 jako skok od generate_series (datum' 2010-01-01 ', datum' 2020-03-01 ', interval' 1 rok ') jako t (datum);

Isodow je „ISO“ standardní den v týdnu. Dotaz se bude provádět od roku 2010 do roku 2020 a bude manipulovat každý měsíc, týden a den v roce.

Příklad 06: Generování řady konkrétních dat a čísel dnů v týdnu

V tomto dotazu získáme data a čísla dnů filtrováním dnů v týdnu. Číselně budeme uvažovat dny v týdnu. Například od 0 do 6. Kde 0 je neděle a 6 je sobota. V tomto dotazu uvidíte, že jsme použili podmínku, abychom přinesli data a čísla dnů, která nejsou v číslech 2 a 5. Například 20. února byla sobota, takže počet, který se objevil, je 6.

>> s dny jako (vyberte dd, extrahujte (DOW z dd) dw z generate_series ('2021-02-20' :: date, '2021-03-05' :: date, '1 day' :: interval) dd ) vyberte * ze dnů, kdy dw není v (2,5);

Závěr

Článek, jak je uvedeno výše, pokrývá většinu základních funkcí souvisejících s generováním řad pro vytváření datových řad. Podrobné příklady diskutované v každém aspektu jsou tak smysluplné, že budou eskalovat znalosti vašeho článku.

Hry 5 nejlepších arkádových her pro Linux
5 nejlepších arkádových her pro Linux
V dnešní době jsou počítače vážné stroje používané k hraní her. Pokud nemůžete získat nové vysoké skóre, budete vědět, co tím myslím. V tomto příspěvk...
Hry Battle For Wesnoth 1.13.6 Vývoj uvolněn
Battle For Wesnoth 1.13.6 Vývoj uvolněn
Battle For Wesnoth 1.13.6 vydané minulý měsíc, je šestým vývojovým vydáním v 1.13.série x a přináší řadu vylepšení, zejména do uživatelského rozhraní,...
Hry Jak nainstalovat League Of Legends na Ubuntu 14.04
Jak nainstalovat League Of Legends na Ubuntu 14.04
Pokud jste fanouškem League of Legends, pak je to pro vás příležitost otestovat běh League of Legends. Všimněte si, že LOL je podporován na PlayOnLinu...