W PostgreSQL funkcja make_interval()
funkcja tworzy interwał z pól lat, miesięcy, tygodni, dni, godzin, minut i sekund.
Podajesz pola lat, miesięcy, tygodni, dni, godzin, minut i/lub sekund, a zwróci interwał w przedziale typ danych.
Składnia
Funkcja ma następującą składnię:
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)
Przykład
Oto przykład do zademonstrowania.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Wynik:
1 year 2 mons 25 days 05:06:07
W tym przykładzie podałem wszystkie siedem argumentów.
Jest to tradycyjny mechanizm przekazywania argumentów do funkcji w PostgreSQL i jest określany jako „notacja pozycyjna”.
W przypadku korzystania z notacji pozycyjnej wszystkie argumenty są podane w kolejności.
Zapis nazwany
Oto przykład z użyciem notacji nazwanej.
SELECT make_interval(days => 12);
Wynik:
12 days
W tym przykładzie używam notacji nazwanej, aby określić tylko jeden argument. Dzięki temu nie muszę wprowadzać wszystkich argumentów, wystarczy określić liczbę dni.
Wszystkie argumenty są domyślnie zerowe, więc ich pominięcie nie ma negatywnego wpływu.
Oto, co się stanie, jeśli nie użyję notacji nazwanej przy określaniu tylko jednego argumentu.
SELECT make_interval(12);
Wynik:
12 years
Zakładało, że mam na myśli 12 lat.
Zaletą notacji nazwanej jest to, że możesz podać tyle argumentów, ile potrzebujesz i nie więcej.
Na przykład:
SELECT make_interval(months => 10, days => 5, mins => 47);
Wynik:
10 mons 5 days 00:47:00
Starsza nazwana notacja
Starsze wersje Postgresa używały nieco innej składni dla notacji nazwanej. Ta składnia używa :=
zamiast =>
.
Przykład:
SELECT make_interval(days := 12);
Wynik:
12 days
Od Postgres 12 ta składnia nadal działa w celu zapewnienia kompatybilności wstecznej.
Tygodnie i dni
W przypadku interwałów Postgres tygodnie są przedstawiane jako dni. Więc jeśli określisz weeks
argument, wynik będzie w dniach.
SELECT make_interval(weeks => 2);
Wynik:
14 days
Dlatego jeśli określisz również days
argument, zostanie dodany do dni wyprodukowanych przez weeks
argument.
SELECT make_interval(weeks => 2, days => 3);
Wynik:
17 days
Styl wyjścia interwałowego
W Postgresie format wyjściowy typu interwału można ustawić na jeden z następujących czterech stylów interwałów:
sql_standard
postgres
postgres_verbose
iso_8601
Możesz to ustawić za pomocą SET intervalstyle
. Domyślnie jest to postgres
format.
Wszystkie poprzednie przykłady używają formatu domyślnego (postgres
).
Oto przykład, który demonstruje wyjście make_interval()
podczas korzystania z różnych stylów wyjściowych.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Wynik:
+1-2 +25 +5:06:07
postgres
To jest ustawienie domyślne.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Wynik:
1 rok 2 pon 25 dni 05:06:07
postgres_verbose
SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Wynik:
@ 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);
Wynik:
P1Y2M25DT5H6M7S