sql >> Database >  >> RDS >> PostgreSQL

Hoe make_interval() werkt in PostgreSQL

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

  1. Hoe een tabel met beperkte externe sleutels af te kappen?

  2. Android Room-waarschuwing tijdens compileren over kolom in externe sleutel die geen deel uitmaakt van een index. Wat betekent het?

  3. Hoe u een tabel in PostgreSQL kunt draaien

  4. Hoe een geparametriseerde Oracle Insert-query te schrijven?