V PostgreSQL, make_interval()
Funkce vytvoří interval z polí roky, měsíce, týdny, dny, hodiny, minuty a sekundy.
Zadáte roky, měsíce, týdny, dny, hodiny, minuty a/nebo sekundy a vrátí se interval v intervalu datový typ.
Syntaxe
Funkce má následující syntaxi:
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)
Příklad
Zde je příklad k demonstraci.
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Výsledek:
1 year 2 mons 25 days 05:06:07
V tomto příkladu jsem uvedl všech sedm argumentů.
Toto je tradiční mechanismus pro předávání argumentů funkcím v PostgreSQL a nazývá se to „poziční zápis“.
Při použití pozičního zápisu jsou všechny argumenty zadány v pořadí.
Pojmenovaná notace
Zde je příklad použití pojmenovaného zápisu.
SELECT make_interval(days => 12);
Výsledek:
12 days
V tomto příkladu používám pojmenovanou notaci, abych uvedl pouze jeden argument. To mi ušetří nutnost zadávat všechny argumenty, jen abych specifikoval počet dní.
Všechny argumenty jsou ve výchozím nastavení nula, takže jejich vynechání nemá žádný nepříznivý dopad.
Zde je to, co se stane, když nepoužiji pojmenovanou notaci při zadávání pouze jednoho argumentu.
SELECT make_interval(12);
Výsledek:
12 years
Předpokládalo se, že mám na mysli 12 let.
Dobrá věc na pojmenované notaci je, že můžete poskytnout tolik argumentů, kolik potřebujete, a nic víc.
Například:
SELECT make_interval(months => 10, days => 5, mins => 47);
Výsledek:
10 mons 5 days 00:47:00
Starší pojmenovaný zápis
Starší verze Postgresu používaly mírně odlišnou syntaxi pro pojmenovanou notaci. Tato syntaxe používá :=
místo =>
.
Příklad:
SELECT make_interval(days := 12);
Výsledek:
12 days
Od Postgresu 12 tato syntaxe stále funguje pro zpětnou kompatibilitu.
Týdny a dny
U intervalů Postgres jsou týdny reprezentovány jako dny. Pokud tedy zadáte weeks
argument, výsledek bude za dny.
SELECT make_interval(weeks => 2);
Výsledek:
14 days
Pokud tedy zadáte také days
argument, bude přidán ke dnům vytvořeným weeks
argument.
SELECT make_interval(weeks => 2, days => 3);
Výsledek:
17 days
Styl výstupu intervalu
V Postgresu lze výstupní formát intervalového typu nastavit na jeden z následujících čtyř intervalových stylů:
sql_standard
postgres
postgres_verbose
iso_8601
Můžete to nastavit pomocí SET intervalstyle
. Výchozí hodnota je postgres
formát.
Všechny předchozí příklady používají výchozí formát (postgres
).
Zde je příklad, který demonstruje výstup make_interval()
při použití různých výstupních stylů.
sql_standard
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Výsledek:
+1-2 +25 +5:06:07
postgres
Toto je výchozí nastavení.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Výsledek:
1 rok 2 po 25 dní 05:06:07
postgres_verbose
SET intervalstyle = 'postgres_verbose';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Výsledek:
@ 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);
Výsledek:
P1Y2M25DT5H6M7S