In PostgreSQL, de make_interval()
functie maakt een interval van jaren, maanden, weken, dagen, uren, minuten en seconden velden.
U geeft de velden jaren, maanden, weken, dagen, uren, minuten en/of seconden op en er wordt een interval geretourneerd in het interval gegevenstype.
Syntaxis
De functie heeft de volgende syntaxis:
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)
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Resultaat:
1 year 2 mons 25 days 05:06:07
In dit voorbeeld heb ik alle zeven argumenten gegeven.
Dit is het traditionele mechanisme voor het doorgeven van argumenten aan functies in PostgreSQL, en het wordt "positionele notatie" genoemd.
Bij gebruik van positionele notatie worden alle argumenten in volgorde gespecificeerd.
Benoemde notatie
Hier is een voorbeeld waarin benoemde notatie wordt gebruikt.
SELECT make_interval(days => 12);
Resultaat:
12 days
In dit voorbeeld gebruik ik benoemde notatie om slechts één argument te specificeren. Hierdoor hoef ik niet alle argumenten in te voeren, alleen het aantal dagen op te geven.
Alle argumenten zijn standaard nul, dus er is geen nadelige invloed door ze weg te laten.
Dit is wat er gebeurt als ik geen benoemde notatie gebruik bij het specificeren van slechts één argument.
SELECT make_interval(12);
Resultaat:
12 years
Het ging ervan uit dat ik 12 jaar bedoelde.
Het goede aan benoemde notatie is dat je zoveel argumenten kunt geven als je nodig hebt, en niet meer.
Bijvoorbeeld:
SELECT make_interval(months => 10, days => 5, mins => 47);
Resultaat:
10 mons 5 days 00:47:00
Verouderde benoemde notatie
Oudere versies van Postgres gebruikten een iets andere syntaxis voor benoemde notatie. Deze syntaxis gebruikt :=
in plaats van =>
.
Voorbeeld:
SELECT make_interval(days := 12);
Resultaat:
12 days
Vanaf Postgres 12 werkt deze syntaxis nog steeds voor achterwaartse compatibiliteit.
Weken en dagen
Met Postgres-intervallen worden weken weergegeven als dagen. Dus als u de weeks
. specificeert argument, het resultaat is in dagen.
SELECT make_interval(weeks => 2);
Resultaat:
14 days
Dus als u ook de days
. specificeert argument, wordt het toegevoegd aan de dagen geproduceerd door de weeks
argument.
SELECT make_interval(weeks => 2, days => 3);
Resultaat:
17 days
Interval-uitvoerstijl
In Postgres kan het uitvoerformaat van het intervaltype worden ingesteld op een van de volgende vier intervalstijlen:
sql_standard
postgres
postgres_verbose
iso_8601
U kunt dit instellen met SET intervalstyle
. De standaard is de postgres
formaat.
De vorige voorbeelden gebruiken allemaal het standaardformaat (postgres
).
Hier is een voorbeeld dat de uitvoer demonstreert van make_interval()
bij gebruik van verschillende uitvoerstijlen.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Resultaat:
+1-2 +25 +5:06:07
postgres
Dit is de standaardinstelling.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Resultaat:
1 jaar 2 maanden 25 dagen 05:06:07
postgres_verbose
SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Resultaat:
@ 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);
Resultaat:
P1Y2M25DT5H6M7S