PostgreSQL Generate_series for å lage en datoserie

PostgreSQL Generate_series for å lage en datoserie

Du må være kjent med dataregistrering i et hvilket som helst databasestyringssystem. Når du legger inn data, kan det hende du ikke har tid, og du må ignorere hull i dataene dine eller vil ha noen konsistente serier med poster. I denne situasjonen er PostgreSQL Generate_series aktuelt for å oppnå det nødvendige målet. Som navnet indikerer, inneholder mekanismen for denne funksjonen enten 2 eller 3 innganger. Jeg.e., Generate_series lar deg generere en sekvens av poster med et utgangspunkt, avslutte punktet og øke verdien (valgfritt). Det fungerer hovedsakelig på to datatyper. Jeg.e., Heltall og tidsstempler. For å lage en sekvens av datoer, brukes generere_series -funksjonen på forskjellige måter.

Syntaks:

>> generere_serier ([start], [stopp], [valgfritt trinn/intervall]);

Beskrivelsen for spørringssyntaks er som følger:

  • [start]: Det er utgangspunktet for å generere en serie.
  • [Stoppe]: Dette viser poenget der serien vil stoppe.
  • [intervall]: Den tredje, men valgfrie verdien innebærer hvor mye serien vil øke i hvert trinn. Standardverdien for intervaller er 1.

La oss ha en ide om hvordan generate_series () -funksjonen kan prestere. Nedenfor er noen elementære eksempler. For å forstå denne funksjonens konsept, må vi installere og åpne PostgreSQL-kommandolinjeskallet (PSQL).

Etter vellykket konfigurasjon, og mens vi leverer localhost, databasenavn, portnummer og passord, kan vi gå gjennom alle spørsmål på PSQL.

Eksempel 01: generere_serier ved hjelp av dato pluss heltalloperatør

Følgende spørring inneholder en "dato" innebygd funksjon for å hente gjeldende dato. Mens “A” er operatøren gitt. Denne operatørens funksjon er å legge til det bestemte tallet (intervallet) i dagens del av datoen. Eller med andre ord, med spesifikke intervaller, blir dagene forskjøvet og vist på datoen. I utgangen vil "9" -intervallet bli lagt til hver dag, i.e., 9+9 = 18, deretter 27, og så videre, til summen av 40 er oppnådd.

>> Velg Current_Date + S.A som datoer fra generere_serier (0,40,9) som S (a);

Eksempel 02: Bruke gjeldende dato for å generere datoserie

For å generere datoserie med gjeldende datohjelp, bruker vi nå () -funksjonen, som tar gjeldende dato automatisk fra systemet. Du kan se den tilsvarende utgangen viser datoen opp til 4 dager. Dette er fordi vi har begrenset utførelsen ved å legge til 4 dager til gjeldende dato. Som vi har gitt intervalltiden til 1 dag, slik at hver dato vil bli økt med 1 tillegg på dagen

>> velg * fra generere_series (nå (), nå () + '4 dager', '1 dag');

Eksempel 03: Generering av datoserier ved hjelp av tidsstempler

Tidsstempler på timer: Denne funksjonen bruker også datatypen til tidsstempler. Tidspunktet er i utgangspunktet en sekvens av tegn som gir tid og dato for en relatert dag. Den tilsvarende funksjonen letter brukeren ved å tilby datoer mellom begge datoene vi pleide å forutse i spørringen. Listen over tidsstempler fra dato 7 til 11 med en tidsstempel hver 5. time oppnås.

>> Velg * fra Generate_series ('2021-3-7 00:00' :: Timestamp, '2021-3-11 12:00', '5 timer');

Spørringen, som nevnt ovenfor, brukes også til å legge til minutter og sekunder med timer for å skaffe seg en bedre tidsstempel mellom dager med relevant tidsstempel.

Tidsstempler av dager: I det overskridende eksemplet har vi sett at tidsstempel brukes til å vise datoer mellom de to respektive datoer vi har gitt endringen i timer økt med 5. I det nåværende eksemplet vil vi se tidsstemplet om dager. Dagene økes med 2, da vi har satt i gang et 2-dagers gap i den spesielle utgangen.

>> Velg * fra Generate_series ('2021-03-01' :: Timestamptz, '2021-03-19' :: Timestamptz, '2 dager');

Eksempel 04: Generering av spesifikke datoer for måneden ved å bruke dato_trunc

Første dag i måneden

Hvis vi ønsker å generere den første datoen i inneværende måned, vil vi bruke spørringen vedlagt nedenfor.Den distinkte funksjonen som brukes her er date_trunc, som avkortes datoen for gitt presisjon.Jeg.e. nå()

>> velg date_trunc ('måned', nå ());

Siste dag i måneden

Den samme dato_trunc -tilnærmingen vil generere den siste dagen i måneden.

>> velg date_trunc ('måned', nå ()) + '1 måned' :: intervall - '1 dag' :: intervall som end_of_month;

Midt i måneden

Midt i måneden oppnås ved å endre i forrige spørring. Vi vil bruke middelfunksjonen for å oppnå det respektive målet. Eller vi vil trekke fra 17 dager fra den siste.

>> velg dato_trunc ('måned', nå ()) + '1 måned' :: intervall - '17 dager ':: intervall som mid_of_month;

Eksempel 05: Generering av datoer ved hjelp av kalenderrelaterte data

Her kommer eksemplet med å bruke kalenderdata. Vi vil bli kjent med sprangåret, jeg.e., Totalt dager i februar måned.”T” betegner ekte midler som er et sprangår, og for "F", er det falskt "Dow" representerer ukens dager. Kolonnen "Feb" inneholder totale dager i måneden. “Dag” betegner Jans første dag i hvert år. I følge forskning starter uker med ISO fra mandag, og den første uken i året inneholder 5. januar året.

>> Velg dato :: dato, utdrag ('isodow' fra dato) som dow, to_char (dato, 'dy') som dag, ekstrakt ('iso år' fra dato) som "iso år", ekstrakt ('uke' Fra dato) som uke, Extract ('Day'from (Date + Interal' 2 Month - 1 Day ')) som februar, Extract (' År 'fra dato) som år, Extract (' Day 'fra (Date + Interal' ' 2 måned-1 dag ')) = 29As sprang fra generere_serier (dato' 2010-01-01 ', dato' 2020-03-01 ', intervall' 1 år ') som t (dato);

Isodow er "ISO" standardens dag i uken. Spørringen vil utføre fra 2010 til 2020 mens du manipulerer hver måned, uke og dag i året.

Eksempel 06: Genererende serie med spesifikke datoer og dagsnummer i uken

I denne spørringen vil vi skaffe datoer og dagstall ved å filtrere dager i løpet av en uke. Vi vil numerisk vurdere ukens dager. For eksempel fra 0 til 6. Hvor 0 er søndag og 6 er lørdag. I denne spørringen vil du se at vi har brukt en betingelse for å bringe datoer og dagstall som ikke er i 2 og 5. For eksempel 20. februar var det lørdag, så antallet som dukket opp er 6.

>> Med dager som (velg DD, Extract (Dow fra DD) DW fra Generate_Series ('2021-02-20' :: Dato, '2021-03-05' :: Dato, '1 dag' :: intervall) DD ) velg *fra dager der DW ikke i (2,5);

Konklusjon

Artikkelen, som nevnt ovenfor, dekker flertallet av grunnleggende funksjonaliteter relatert til generasjonsserier for å lage datoserie. Detaljerte eksempler omtalt i alle aspekter er så meningsfulle at de vil eskalere din respektive artikkelens kunnskap.