PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Funktionsweise von make_interval() in PostgreSQL

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