PostgreSQL

Postgresql Generate_Series for å lage en dataserie

Postgresql Generate_Series for å lage en dataserie

Du må være kjent med dataregistrering i ethvert databasestyringssystem. Mens du skriver inn data, har du kanskje ikke tid, og du må ignorere hull i dataene dine, eller du vil ha en jevn serie med poster. I denne situasjonen er PostgreSQL generasjonsserier gjeldende for å oppnå det nødvendige målet. Som navnet indikerer, inneholder mekanismen til denne funksjonen enten 2 eller 3 innganger. Jeg.e., create_series lar deg generere en sekvens av poster med et startpunkt, avslutningspunkt og økende verdi (valgfritt). Det fungerer hovedsakelig på to datatyper. Jeg.e., Heltall og tidsstempler. For å opprette en sekvens av datoer, brukes funksjonen generere_serier på forskjellige måter.

Syntaks:

>> Generate_series ([start], [stop], [optional trinn / intervall]);

Beskrivelsen for spørringssyntaks er som følger:

La oss få en idé om hvordan generere_series () -funksjonen kan utføre. Nedenfor er noen grunnleggende eksempler. For å forstå denne funksjonens konsept, må vi installere og åpne postgreSQL kommandolinjeskall (psql).

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

Eksempel 01: Generate_series ved hjelp av DATE plus heltalloperator

Følgende spørsmål inneholder en “DATE” innebygd funksjon for å hente gjeldende dato. Mens “a” er gitt av operatøren. Denne operatørens funksjon er å legge til det bestemte nummeret (intervall) i dagens del av datoen. Eller med andre ord, med spesifikke intervaller, skiftes dagene og vises i datoen. I utgangen vil "9" -intervallet legges til hver dag, dvs.e., 9 + 9 = 18, deretter 27, og så videre, til summen av 40 er oppnådd.

>> VELG current_DATE + s.en AS daterer FRA Generate_series (0,40,9) AS s (a);

Eksempel 02: Bruk nåværende dato for å generere dataserier

For å generere dataserier med gjeldende datahjelp, bruker vi funksjonen now (), som tar den gjeldende datoen automatisk fra systemet. Du kan se tilsvarende utdata viser datoen inntil 4 dager. Dette er fordi vi har begrenset utførelsen ved å legge til 4 dager til dagens dato. Som vi har gitt intervalltiden til 1 dag, vil hver dato økes med 1 tillegg i dag

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

Eksempel 03: Genererer dataserier ved hjelp av tidsstempler

Tidsstempler av timer: Denne funksjonen bruker også datatypen for tidsstempler. Tidsstempelet er i utgangspunktet en sekvens av tegn som gir tid og dato for en relatert dag. Den tilsvarende funksjonen gjør det lettere for brukeren å oppgi datoer mellom begge datoene vi brukte å forutse i spørringen. Listen over tidsstempler fra dato 7 til 11 med ett tidsstempel hver 5. time er oppnådd.

>> velg * fra generer_serier ('2021-3-7 00:00' :: tidsstempel, '2021-3-11 12:00', '5 timer');

Søket, som nevnt ovenfor, brukes også til å legge til minutter og sekunder med timer for å få et bedre tidsstempel mellom dager med relevant tidsstempel.

Tidsstempler av dager: I det overordnede eksemplet har vi sett at tidsstempel brukes til å vise datoer mellom de to respektive datoene vi har oppgitt med endringen i timer steget med 5. I det nåværende eksemplet vil vi se tidsstemplet i dager. Dager økes med 2 da vi har startet et 2-dagers gap i den spesielle produksjonen.

>> velg * fra generer_serier ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 dager');

Eksempel 04: Genererer spesifikke datoer for måneden ved hjelp av date_trunc

Første dag i måneden

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

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

      Siste dag i måneden

Den samme tilnærmingen date_trunc genererer den siste dagen i måneden.

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

Midt i måneden

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

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

Eksempel 05: Generere datoer ved hjelp av kalenderrelaterte data

Her kommer eksemplet med bruk av kalenderdata. Vi vil bli kjent med skuddåret, dvs.e., totalt antall dager i februar måned.”T” betegner sant betyr at året er et skuddår, og for “f” er det falskt “dow” representerer ukedagene. Kolonnen "Feb" inneholder totale dager i måneden. “Dag” betegner Jan sin første dag i hvert år. Ifølge forskning starter uker med ISO fra mandag, og den første uken i et år inneholder 5. januar i året.

>> velg dato :: dato, pakke ut ('isodow' fra dato) som dow, til_char (dato, 'dy') som dag, pakke ut ('iso år' fra dato) som "iso år", trekke ut ('uke' fra dato) som uke, trekke ut ('dag' fra (dato + intervall '2 måneder - 1 dag')) som feb, trekke ut ('år' fra dato) som år, trekke ut ('dag' fra (dato + intervall ' 2 måneder - 1 dag ')) = 29 som sprang fra generer_serier (dato' 2010-01-01 ', dato' 2020-03-01 ', intervall' 1 år ') som t (dato);

Isodow er “ISO” -dagens ukedag. Spørringen vil kjøres fra 2010 til 2020 mens den manipuleres hver måned, uke og dag i året.

Eksempel 06: Genererer serie med spesifikke datoer og dager i uken

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

>> med dager som (velg dd, trekk ut (DOW fra dd) dw fra generer_serier ('2021-02-20' :: dato, '2021-03-05' :: dato, '1 dag' :: intervall) dd ) velg * fra dager der ikke bor i (2,5);

Konklusjon

Artikkelen, som nevnt ovenfor, dekker de fleste grunnleggende funksjoner knyttet til å generere serier for å lage dataserier. Detaljerte eksempler diskutert i alle aspekter er så meningsfylte at de vil trappe opp din respektive artikkels kunnskap.

Beste spill å spille med håndsporing
Oculus Quest introduserte nylig den gode ideen om håndsporing uten kontrollere. Med et stadig økende antall spill og aktiviteter som utfører støtte en...
Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...
Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...