В PostgreSQL make_interval()
функцията създава интервал от полета за години, месеци, седмици, дни, часове, минути и секунди.
Вие предоставяте полетата за години, месеци, седмици, дни, часове, минути и/или секунди и то ще върне интервал в интервала тип данни.
Синтаксис
Функцията има следния синтаксис:
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)
Пример
Ето пример за демонстрация.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Резултат:
1 year 2 mons 25 days 05:06:07
В този пример предоставих всичките седем аргумента.
Това е традиционният механизъм за предаване на аргументи към функциите в PostgreSQL и се нарича „позиционна нотация“.
Когато се използва позиционна нотация, всички аргументи са посочени в ред.
Именна нотация
Ето пример за използване на обозначена нотация.
SELECT make_interval(days => 12);
Резултат:
12 days
В този пример използвам именувана нотация, за да посоча само един аргумент. Това ме спестява от необходимостта да въвеждам всички аргументи, само за да посоча броя на дните.
Всички аргументи по подразбиране са нулеви, така че няма неблагоприятно въздействие, ако ги пропуснете.
Ето какво се случва, ако не използвам нотация с име, когато посоча само един аргумент.
SELECT make_interval(12);
Резултат:
12 years
Предполагаше, че имам предвид 12 години.
Хубавото на наименованата нотация е, че можете да предоставите толкова аргументи, колкото са ви необходими, и не повече.
Например:
SELECT make_interval(months => 10, days => 5, mins => 47);
Резултат:
10 mons 5 days 00:47:00
Наследена именувана нотация
По-старите версии на Postgres използваха малко по-различен синтаксис за наименована нотация. Този синтаксис използва :=
вместо =>
.
Пример:
SELECT make_interval(days := 12);
Резултат:
12 days
От Postgres 12 този синтаксис все още работи за обратна съвместимост.
Седмици и дни
С интервалите на Postgres седмиците се представят като дни. Така че, ако посочите weeks
аргумент, резултатът ще бъде в дни.
SELECT make_interval(weeks => 2);
Резултат:
14 days
Следователно, ако посочите и days
аргумент, той ще бъде добавен към дните, произведени от weeks
аргумент.
SELECT make_interval(weeks => 2, days => 3);
Резултат:
17 days
Интервален изходен стил
В Postgres изходният формат на типа интервал може да бъде зададен на един от следните четири интервални стила:
sql_standard
postgres
postgres_verbose
iso_8601
Можете да зададете това, като използвате SET intervalstyle
. По подразбиране е postgres
формат.
Всички предишни примери използват формата по подразбиране (postgres
).
Ето пример, който демонстрира изхода на make_interval()
когато използвате различни изходни стилове.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Резултат:
+1-2 +25 +5:06:07
postgres
Това е настройката по подразбиране.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Резултат:
1 година 2 мес. 25 дни 05:06:07
postgres_verbose
SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Резултат:
@ 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);
Резултат:
P1Y2M25DT5H6M7S