In PostgreSQL das make_interval()
Funktion erstellt ein Intervall aus den Feldern Jahre, Monate, Wochen, Tage, Stunden, Minuten und Sekunden.
Sie geben die Felder für Jahre, Monate, Wochen, Tage, Stunden, Minuten und/oder Sekunden ein und es wird ein Intervall im Intervall zurückgegeben Datentyp.
Syntax
Die Funktion hat folgende Syntax:
make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0)
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Ergebnis:
1 year 2 mons 25 days 05:06:07
In diesem Beispiel habe ich alle sieben Argumente angegeben.
Dies ist der traditionelle Mechanismus zum Übergeben von Argumenten an Funktionen in PostgreSQL und wird als „Positionsnotation“ bezeichnet.
Bei Verwendung der Positionsnotation werden alle Argumente der Reihe nach angegeben.
Benannte Notation
Hier ist ein Beispiel mit benannter Notation.
SELECT make_interval(days => 12);
Ergebnis:
12 days
In diesem Beispiel verwende ich die benannte Notation, um nur ein Argument anzugeben. Das erspart mir die Eingabe aller Argumente, nur um die Anzahl der Tage anzugeben.
Alle Argumente sind standardmäßig auf null gesetzt, sodass es keine nachteiligen Auswirkungen gibt, sie wegzulassen.
Folgendes passiert, wenn ich bei der Angabe von nur einem Argument keine benannte Notation verwende.
SELECT make_interval(12);
Ergebnis:
12 years
Es ging davon aus, dass ich 12 Jahre meinte.
Das Gute an benannter Notation ist, dass Sie so viele Argumente angeben können, wie Sie benötigen, und nicht mehr.
Zum Beispiel:
SELECT make_interval(months => 10, days => 5, mins => 47);
Ergebnis:
10 mons 5 days 00:47:00
Legacy benannte Notation
Ältere Versionen von Postgres verwendeten eine etwas andere Syntax für die benannte Notation. Diese Syntax verwendet :=
statt =>
.
Beispiel:
SELECT make_interval(days := 12);
Ergebnis:
12 days
Ab Postgres 12 funktioniert diese Syntax aus Gründen der Abwärtskompatibilität immer noch.
Wochen und Tage
Bei Postgres-Intervallen werden Wochen als Tage dargestellt. Wenn Sie also die weeks
angeben Argument, wird das Ergebnis in Tagen angezeigt.
SELECT make_interval(weeks => 2);
Ergebnis:
14 days
Geben Sie also auch die days
an Argument, wird es zu den Tagen addiert, die von den weeks
erzeugt werden Argument.
SELECT make_interval(weeks => 2, days => 3);
Ergebnis:
17 days
Intervall-Ausgabestil
In Postgres kann das Ausgabeformat des Intervalltyps auf einen der folgenden vier Intervallstile eingestellt werden:
sql_standard
postgres
postgres_verbose
iso_8601
Sie können dies mit SET intervalstyle
festlegen . Der Standardwert ist postgres
formatieren.
Die vorherigen Beispiele verwenden alle das Standardformat (postgres
).
Hier ist ein Beispiel, das die Ausgabe von make_interval()
demonstriert bei Verwendung unterschiedlicher Ausgabestile.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Ergebnis:
+1-2 +25 +5:06:07
postgres
Dies ist die Standardeinstellung.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Ergebnis:
1 Jahr 2 Monate 25 Tage 05:06:07
postgres_verbose
SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Ergebnis:
@ 1 year 2 mons 25 days 5 hours 6 mins 7 secs
iso_8601
SET intervalstyle = 'iso_8601';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Ergebnis:
P1Y2M25DT5H6M7S