PostgreSQL Generate_Series, um eine Datumsserie zu erstellen

PostgreSQL Generate_Series, um eine Datumsserie zu erstellen

Sie müssen mit der Dateneingabe in jedem Datenbankverwaltungssystem vertraut sein. Während der Eingabe von Daten haben Sie möglicherweise keine Zeit und müssen Lücken in Ihren Daten ignorieren oder eine konsistente Reihe von Datensätzen wünschen. In dieser Situation gilt PostgreSQL Generate_Series, um das erforderliche Ziel zu erreichen. Wie der Name angibt, enthält der Mechanismus dieser Funktion entweder 2 oder 3 Eingänge. ich.e., Mit Generate_Series können Sie eine Folge von Datensätzen mit einem Ausgangspunkt, einem Abschlusspunkt und dem Inkrementierungswert (optional) generieren (optional). Es funktioniert hauptsächlich bei zwei Datentypen. ich.e., Ganzzahlen und Zeitstempel. Um eine Abfolge von Daten zu erstellen, wird die Funktion generate_series auf unterschiedliche Weise verwendet.

Syntax:

>> generate_series ([start], [stop], [optional Step/Intervall]);

Die Beschreibung für die Abfragesyntax lautet wie folgt:

  • [Start]: Es ist der Ausgangspunkt der Erzeugung einer Serie.
  • [stoppen]: Dies zeigt den Punkt, an dem die Serie aufhört.
  • [Intervall]: Der dritte, aber optionale Wert impliziert, wie viel die Serie in jedem Schritt erhöht wird. Der Standardwert für Intervalle beträgt 1.

Lassen Sie uns eine Vorstellung davon haben, wie die Funktion generate_series () ausgeführt werden kann. Im Folgenden finden Sie einige elementare Beispiele. Um das Konzept dieser Funktion zu verstehen, müssen wir die PostgreSQL-Befehlszeilenschale (PSQL) installieren und öffnen.

Nach erfolgreicher Konfiguration und Bereitstellung von Localhost, Datenbankname, Portnummer und Passwort können wir jede Abfrage auf PSQL durchgehen.

Beispiel 01: Generate_Series mit dem Datum plus ganzzahliger Operator generieren

Die folgende Abfrage enthält eine integrierte Funktion "Datum", um das aktuelle Datum abzurufen. Während „A“ der Bediener zur Verfügung gestellt wird. Die Funktion dieses Bedieners besteht darin, diese bestimmte Zahl (Intervall) im Tag des Datums des Tages hinzuzufügen. Oder mit anderen Worten, mit bestimmten Intervallen werden Tage verschoben und am Datum gezeigt. In der Ausgabe wird das „9“ -Intervall jeden Tag hinzugefügt, ich.e., 9+9 = 18, dann 27 und so weiter, bis die Summe von 40 erreicht ist.

>> Wählen Sie Current_date + s.a als Daten von generate_series (0,40,9) als s (a);

Beispiel 02: Verwenden Sie das aktuelle Datum, um Datumserien zu generieren

Um Datumserien mit der Hilfe des aktuellen Datums zu generieren, verwenden wir die Funktion NOW (), die das aktuelle Datum automatisch vom System abnimmt. Sie können sehen, dass die entsprechende Ausgabe das Datum bis zu 4 Tagen zeigt. Dies liegt daran, dass wir die Ausführung begrenzt haben, indem wir zum aktuellen Datum 4 Tage hinzufügen. Da wir die Intervallzeit bis 1 Tag bereitgestellt haben, wird jedes Datum mit 1 Addition am Tag erhöht

>> Wählen Sie * von generate_series (now (), now () + '4 days', '1 Day');

Beispiel 03: Generierungsdatumserie mit Zeitstempeln generieren

Zeitstempel von Stunden: Diese Funktion verwendet auch den Datentyp von Zeitstempeln. Der Zeitstempel ist im Grunde eine Folge von Zeichen, die die Uhrzeit und das Datum eines verwandten Tages anbieten. Die entsprechende Funktion erleichtert dem Benutzer bei der Bereitstellung von Daten zwischen beiden Daten, die wir früher in der Abfrage erwartet hatten. Die Liste der Zeitstempel von Datum 7 bis 11 mit einem Zeitstempel alle 5 Stunden wird erhalten.

>> aus generate_series auswählen ('2021-3-7 00:00' :: timestamp, '2021-3-11 12:00', '5 Stunden');

Die oben erwähnte Abfrage wird auch verwendet, um Stunden und Sekunden mit Stunden hinzuzufügen, um einen besseren Zeitstempel zwischen den täglichen Zeitstempel zu erwerben.

Zeitstempel von Tagen: Im überschreitenden Beispiel haben wir gesehen. Im aktuellen Beispiel sehen wir den Zeitstempel in Tagen. Die Tage werden mit 2 erhöht, da wir eine 2-tägige Lücke in der jeweiligen Ausgabe initiiert haben.

>> aus generate_series auswählen ('2021-03-01' :: TimestAMPTZ, '2021-03-19' :: TimestAMPTZ, '2 Days');

Beispiel 04: Generieren spezifischer Daten des Monats unter Verwendung von DATE_TRUNC

Erster Tag des Monats

Wenn wir das erste Datum des aktuellen Monats generieren möchten, verwenden wir die unten angehängte Abfrage.Die hier verwendete eindeutige Funktion ist DATE_TRUNC, die das Datum auf die angegebene Präzision abschneidet.ich.e. Jetzt()

>> select date_trunc ('Monat', jetzt ());

Ultimo

Der gleiche Date_Trunc -Ansatz generiert den letzten Tag des Monats.

>> select date_trunc ('monat', now ()) + '1 Monat' :: Intervall - '1 Tag' :: Intervall AS END_OF_MONTH;

Mitte des Monats

Mitte des Monats wird durch Veränderung in der vorherigen Abfrage erhalten. Wir werden die mittlere Funktion nutzen, um das jeweilige Ziel zu erreichen. Oder wir werden 17 Tage vom letzten abziehen.

>> select date_trunc ('Monat', jetzt ()) + '1 Monat' :: Intervall - '17 Days ':: Intervall AS MID_OF_MONTH;

Beispiel 05: Generieren von Daten mithilfe von kalenderbezogenen Daten generieren

Hier kommt das Beispiel für die Verwendung von Kalenderdaten. Wir werden das Schaltjahr kennenlernen, ich.e., Gesamttage im Februarmonat."T" bedeutet das wahre Mittel, das Jahr ein Schaltjahr ist, und für "F" ist es falsch "Dow" die Wochentage repräsentiert. Die Spalte „Februar“ enthält insgesamt Tage im Monat. "Day" bezeichnet Jan's erster Tag eines jeden Jahres. Laut Research beginnen die Wochen der ISO ab Montag, und die erste Woche eines Jahres enthält den 5. Januar des Jahres.

>> SELECT DATE :: DATUM, extrahieren ('Isodow' ab Datum) als Dow, to_char (Datum, Dy ') als Tag, extrahieren (' ISO -Jahr 'ab Datum) als "ISO -Jahr", Extrakt ("Woche" Ab Datum) als Woche extrahieren ('Day' aus (Datum + Intervall '2 Monat - 1 Tag') als Februar, extrahieren ('Jahr' ab Datum) als Jahr, Extrakt ('Day' ab (Datum + Intervall '' 2 Monate-1 Tag ')) = 29AS Sprung aus generate_series (Datum' 2010-01-01 ', Datum' 2020-03-01 ', Intervall' 1 Jahr ') als t (Datum);

Isodow ist der "ISO" -Tag der Woche der Woche. Die Abfrage wird von 2010 bis 2020 ausgeführt, während sie jeden Monat, die Woche und jeden Tag des Jahres manipuliert.

Beispiel 06: Generierung einer Reihe spezifischer Daten und Tage in der Woche generieren

In dieser Abfrage erwerben wir Daten und Tagesnummern, indem wir Tage in einer Woche filtern. Wir werden numerisch an den Wochentagen berücksichtigen. Zum Beispiel ab 0 bis 6. Wo 0 Sonntag ist und 6 Samstag ist. In dieser Abfrage werden Sie sehen, dass wir eine Bedingung angewendet haben, um Daten und Tageszahlen zu bringen, die nicht in 2 und 5 sind. Zum Beispiel am 20. Februar war es Samstag, so dass die Anzahl der erschien 6 ist 6.

>> mit Tagen As (Select DD, Extrakt (Dow aus DD) DW von generate_series ('2021-02-20' :: Date, '2021-03-05' :: Date, '1 Day' :: Intervall) DD ) Wählen Sie *aus Tagen, an denen DW nicht in (2,5);

Abschluss

Der oben erwähnte Artikel deckt den Großteil der grundlegenden Funktionen im Zusammenhang mit der Generierung von Serien ab, um Datumsserien zu erstellen. Detaillierte Beispiele, die in jedem Aspekt diskutiert werden, sind so sinnvoll, dass sie das Wissen Ihres jeweiligen Artikels eskalieren.