PostgreSQL

Postgresql Generate_Series for at oprette en dataserie

Postgresql Generate_Series for at oprette en dataserie

Du skal være fortrolig med indtastning af data i ethvert databasestyringssystem. Mens du indtaster data, har du muligvis ikke tid, og du er nødt til at ignorere huller i dine data eller ønsker nogle ensartede poster. I denne situation kan PostgreSQL generere_serier anvendes for at nå det krævede mål. Som navnet antyder, indeholder denne funktion enten 2 eller 3 indgange. jeg.e., generere_serier giver dig mulighed for at generere en sekvens af poster med et startpunkt, afsluttende punkt og inkrementeringsværdi (valgfrit). Det fungerer hovedsageligt på to datatyper. jeg.e., Heltal og tidsstempler. For at oprette en sekvens af datoer bruges funktionen generere_serier på forskellige måder.

Syntaks:

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

Beskrivelsen af ​​forespørgselssyntaks er som følger:

Lad os få en idé om, hvordan funktionen generere_serier () kan udføre. Nedenfor er nogle elementære eksempler. For at forstå konceptet for denne funktion er vi nødt til at installere og åbne postgreSQL kommandolinjeskal (psql).

Efter vellykket konfiguration og mens vi leverer localhost, databasenavn, portnummer og adgangskode, kan vi gennemgå enhver forespørgsel på psql.

Eksempel 01: Generate_series ved hjælp af DATE plus heltal operator

Den følgende forespørgsel indeholder en "DATE" indbygget funktion til at hente den aktuelle dato. Mens ”a” er den operatør, der leveres. Denne operatørs funktion er at tilføje det bestemte nummer (interval) i dagens del af datoen. Eller med andre ord, med bestemte intervaller forskydes dage og vises i datoen. I output tilføjes "9" -intervallet hver dag, dvs.e., 9 + 9 = 18, derefter 27 osv., Indtil summen af ​​40 er nået.

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

Eksempel 02: Brug af den aktuelle dato til at generere dataserier

For at generere dataserier med den aktuelle datas hjælp bruger vi funktionen now (), som automatisk tager den aktuelle dato fra systemet. Du kan se den tilsvarende output viser datoen op til 4 dage. Dette skyldes, at vi har begrænset udførelsen ved at tilføje 4 dage til den aktuelle dato. Da vi har angivet intervallet til 1 dag, vil hver dato blive forøget med 1 tilføjelse om dagen

>> vælg * fra generer_serier (nu (), nu () + '4 dage', '1 dag');

Eksempel 03: Generering af dataserier ved hjælp af tidsstempler

Tidsstempler i timer: Denne funktion bruger også datatypen for tidsstempler. Tidsstemplet er dybest set en sekvens af tegn, der giver tid og dato for en relateret dag. Den tilsvarende funktion letter brugeren med at angive datoer mellem begge datoer, vi plejede at forudse i forespørgslen. Listen over tidsstempler fra dato 7 til 11 med et tidsstempel hver 5. time opnås.

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

Forespørgslen, som nævnt ovenfor, bruges også til at tilføje minutter og sekunder med timer for at opnå et bedre tidsstempel mellem dage med relevant tidsstempel.

Dages tidsstempler: I det overordnede eksempel har vi set, at tidsstempel bruges til at vise datoer mellem de to respektive datoer, vi har leveret med ændringen i timer forøget med 5. I det aktuelle eksempel vil vi se tidsstemplet i dage. Dage forøges med 2, da vi har startet et 2-dages hul i den bestemte produktion.

>> vælg * fra generer_serier ('2021-03-01' :: timestamptz, '2021-03-19' :: timestamptz, '2 dage');

Eksempel 04: Generering af specifikke datoer for måneden ved hjælp af date_trunc

Første dag i måneden

Hvis vi vil generere den første dato i den aktuelle måned, bruger vi forespørgslen, der er vedhæftet nedenfor.Den distinkte funktion, der bruges her, er date_trunc, som afkorter datoen til den givne præcision.jeg.e. nu()

>> vælg date_trunc ('måned', nu ());

      Sidste dag i måneden

Den samme date_trunc-tilgang genererer den sidste dag i måneden.

>> vælg date_trunc ('måned', nu ()) + '1 måned' :: interval - '1 dag' :: interval som slut_måned;

Midt i måneden

Midt i måneden opnås ved at ændre den forrige forespørgsel. Vi vil bruge middelfunktionen til at opnå det respektive mål. Eller vi trækker 17 dage fra den sidste.

>> vælg date_trunc ('måned', nu ()) + '1 måned' :: interval - '17 dage ':: interval som mid_of_month;

Eksempel 05: Generering af datoer ved hjælp af kalenderrelaterede data

Her kommer eksemplet med brug af kalenderdata. Vi vil lære skuddåret at kende, dvs.e., samlede dage i februar måned.”T” betegner sandt betyder år er et skudår, og for “f” er det falsk “dow” repræsenterer ugedagene. Kolonnen "Feb" indeholder samlede dage i måneden. "Dag" betegner Jan's første dag i hvert år. Ifølge forskning starter ISO-uger fra mandag, og den første uge i et år indeholder 5. januar i året.

>> vælg dato :: dato, uddrag ('isodow' fra dato) som dow, til_char (dato, 'dy') som dag, uddrag ('iso år' fra dato) som "iso år", uddrag ('uge' fra dato) som uge, uddrag ('dag' fra (dato + interval '2 måneder - 1 dag')) som feb, uddrag ('år' fra dato) som år, uddrag ('dag' fra (dato + interval ' 2 måneder - 1 dag ')) = 29 som spring fra generer_serier (dato' 2010-01-01 ', dato' 2020-03-01 ', interval' 1 år ') som t (dato);

Isodow er "ISO" standard ugedag. Forespørgslen udføres fra 2010 til 2020, mens den manipuleres hver måned, uge ​​og dag i året.

Eksempel 06: Generering af serie med specifikke datoer og dage i ugen

I denne forespørgsel erhverver vi datoer og dagnumre ved at filtrere dage om en uge. Vi vil numerisk overveje ugedage. For eksempel startende fra 0 til 6. Hvor 0 er søndag og 6 er lørdag. I denne forespørgsel vil du se, at vi har anvendt en betingelse for at bringe datoer og dagnumre, der ikke er i 2 og 5. F.eks. Var den 20. februar lørdag, så antallet, der dukkede op, er 6.

>> med dage som (vælg dd, uddrag (DOW fra dd) dw fra generer_serier ('2021-02-20' :: dato, '2021-03-05' :: dato, '1 dag' :: interval) dd ) vælg * fra dage, hvor der ikke bor (2,5);

Konklusion

Artiklen, som nævnt ovenfor, dækker størstedelen af ​​de grundlæggende funktioner, der er relateret til generering af serier for at oprette dataserier. Detaljerede eksempler, der diskuteres i alle aspekter, er så meningsfulde, at de vil eskalere din respektive artikels viden.

HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...
Sådan bruges AutoKey til at automatisere Linux-spil
AutoKey er et desktopautomatiseringsværktøj til Linux og X11, programmeret i Python 3, GTK og Qt. Ved hjælp af dets scripting og MACRO-funktionalitet ...
Sådan vises FPS-tæller i Linux-spil
Linux-spil fik et stort skub, da Valve annoncerede Linux-support til Steam-klient og deres spil i 2012. Siden da har mange AAA- og indiespil fundet ve...