PostgreSQL

Postgresql Generate_Series om een ​​datumreeks te maken

Postgresql Generate_Series om een ​​datumreeks te maken

U moet bekend zijn met gegevensinvoer in elk databasebeheersysteem. Tijdens het invoeren van gegevens heeft u misschien geen tijd en moet u gaten in uw gegevens negeren of een consistente reeks records willen. In deze situatie is PostgreSQL generation_series van toepassing om het vereiste doel te bereiken. Zoals de naam aangeeft, bevat het mechanisme van deze functie 2 of 3 ingangen. ik.e., Genereer_serie stelt u in staat om een ​​reeks records te genereren met een startpunt, eindpunt en oplopende waarde (optioneel). Het werkt voornamelijk op twee gegevenstypen:. ik.e., Gehele getallen en tijdstempels. Om een ​​reeks datums te maken, wordt de functie Genereer_serie op verschillende manieren gebruikt.

Syntaxis:

>> Generate_series ([start],[stop],[optioneel stap/interval]);

De beschrijving voor de querysyntaxis is als volgt:

Laten we een idee hebben van hoe de functie create_series() kan presteren. Hieronder staan ​​enkele elementaire voorbeelden:. Om het concept van deze functie te begrijpen, moeten we de postgreSQL-opdrachtregelshell (psql) installeren en openen.

Na een succesvolle configuratie en het verstrekken van localhost, databasenaam, poortnummer en wachtwoord, kunnen we elke vraag op psql doornemen.

Voorbeeld 01: Generate_series met behulp van DATE plus integer-operator

De volgende query bevat een ingebouwde functie "DATE" om de huidige datum op te halen. Terwijl "a" de opgegeven operator is. De functie van deze operator is om dat specifieke nummer (interval) toe te voegen aan het daggedeelte van de datum. Of met andere woorden, met specifieke tussenpozen worden de dagen verschoven en weergegeven in de datum. In de uitvoer wordt elke dag het "9"-interval toegevoegd, i.e., 9+9=18, dan 27, enzovoort, totdat de som van 40 is bereikt.

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

Voorbeeld 02: Huidige datum gebruiken om datumreeksen te genereren

Om datumreeksen te genereren met behulp van de huidige datum, gebruiken we de now()-functie, die de huidige datum automatisch uit het systeem haalt. U kunt zien dat de bijbehorende uitvoer de datum tot 4 dagen toont. Dit komt omdat we de uitvoering hebben beperkt door 4 dagen toe te voegen aan de huidige datum. Omdat we de intervaltijd tot 1 dag hebben gegeven, wordt elke datum verhoogd met 1 toevoeging in dag

>> selecteer * uit Genereer_serie (nu(), nu() + '4 dagen', '1 dag');

Voorbeeld 03: Datumreeksen genereren met Tijdstempels

Tijdstempels van uren: Deze functie gebruikt ook het datatype tijdstempels. De tijdstempel is in feite een reeks tekens die de tijd en datum van een gerelateerde dag weergeven. De bijbehorende functie vergemakkelijkt de gebruiker bij het verstrekken van datums tussen beide datums die we gebruikten om in de zoekopdracht te anticiperen. De lijst met tijdstempels van datum 7 tot 11 met één tijdstempel om de 5 uur wordt verkregen.

>> selecteer * uit genereerreeks('2021-3-7 00:00' ::timestamp,'2021-3-11 12:00', '5 hours');

De query, zoals hierboven vermeld, wordt ook gebruikt om minuten en seconden toe te voegen aan uren om een ​​betere tijdstempel te krijgen tussen dagen van relevante tijdstempels.

Tijdstempels van dagen: In het overtreffende voorbeeld hebben we gezien dat tijdstempel wordt gebruikt om datums weer te geven tussen de twee respectieve datums die we hebben verstrekt, met de wijziging in uren verhoogd met 5. In het huidige voorbeeld zien we de tijdstempel in dagen. Dagen worden verhoogd met 2 omdat we een onderbreking van 2 dagen in de specifieke uitvoer hebben geïnitieerd.

>> selecteer * uit Genereer_series('2021-03-01'::timestamptz,'2021-03-19'::timestamptz,'2 dagen');

Voorbeeld 04: Specifieke datums van de maand genereren met date_trunc

Eerste dag van de maand

Als we de eerste datum van de huidige maand willen genereren, gebruiken we de onderstaande zoekopdracht:.De afzonderlijke functie die hier wordt gebruikt, is date_trunc , die de datum afkapt tot een bepaalde precisie.ik.e. nu()

>> selecteer date_trunc('maand',nu());

      Laatste dag van de maand

Dezelfde date_trunc-benadering genereert de laatste dag van de maand.

>> selecteer date_trunc('maand',nu()) + '1 maand'::interval - '1 dag'::interval als eind_van-maand;

Midden van de maand

Het midden van de maand wordt verkregen door de vorige zoekopdracht te wijzigen. We zullen de gemiddelde functie gebruiken om het respectieve doel te verkrijgen. Of we trekken 17 dagen van de laatste af.

>> selecteer date_trunc('maand',nu()) + '1 maand'::interval - '17 dagen'::interval als mid_of_month;

Voorbeeld 05: Datums genereren met kalendergerelateerde gegevens

Hier komt het voorbeeld van het gebruik van kalendergegevens. We zullen het schrikkeljaar leren kennen, i.e., totaal aantal dagen in de maand februari."t" staat voor waar betekent dat jaar een schrikkeljaar is, en voor "f" is het onwaar "dow" staat voor de dagen van de week. De kolom "Feb" bevat het totaal aantal dagen in de maand. "dag" staat voor Jan's eerste dag van elk jaar. Volgens onderzoek beginnen weken ISO vanaf maandag, en de eerste week van een jaar bevat 5 januari van het jaar.

>> selecteer date::date,extract('isodow' from date) as dow,to_char(date, 'dy') as day,extract('iso year' from date) as "iso year", extract('week' from date) as week,extract('day'from (date + interval '2 months - 1 day'))as feb,extract('year' from date) as year,extract('day' from (date + interval ' 2 maand - 1 dag')) = 29as sprong van gene_series(datum '2010-01-01', datum '2020-03-01', interval '1 jaar') als t(datum);

Isodow is de "ISO" standaard dag van de week. De query wordt uitgevoerd van 2010 tot 2020 en manipuleert elke maand, week en dag van het jaar.

Voorbeeld 06: Serie van specifieke datums en dagen in de week genereren

In deze zoekopdracht zullen we datums en dagnummers verkrijgen door dagen in een week te filteren. We zullen numeriek rekening houden met dagen van de week. Bijvoorbeeld, beginnend van 0 tot 6. Waar 0 is zondag en 6 is zaterdag. In deze zoekopdracht ziet u dat we een voorwaarde hebben toegepast om datums en dagnummers mee te nemen die niet tussen 2 en 5 staan. Op 20 februari was het bijvoorbeeld zaterdag, dus het nummer dat verscheen is 6.

>> met dagen als (select dd, extract(DOW from dd) dw from generation_series('2021-02-20'::date,'2021-03-05'::date,'1 day'::interval) dd ) selecteer *van   dagen waarbij  dw niet in (2,5);

Conclusie

Het artikel, zoals hierboven vermeld, behandelt de meeste basisfunctionaliteiten met betrekking tot het genereren van reeksen om datumreeksen te maken. Gedetailleerde voorbeelden die in elk aspect worden besproken, zijn zo betekenisvol dat ze de kennis van uw respectieve artikel zullen vergroten.

Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...
Beste Linux-distributies voor gaming in 2021
Het Linux-besturingssysteem heeft een lange weg afgelegd van zijn oorspronkelijke, eenvoudige, servergebaseerde uiterlijk. Dit besturingssysteem is de...
Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...