Podczas pracy z interwałem typ danych w PostgreSQL, możesz zmienić sposób formatowania danych wyjściowych interwału.
Masz do wyboru cztery formaty, w których mogą być wyświetlane Twoje interwały.
Format wyjściowy typu interwału można ustawić na jeden z następujących stylów:
sql_standard
postgres
postgres_verbose
iso_8601
Domyślny styl to postgres
.
Aby zmienić format interwału, użyj SET intervalstyle
Komenda.
Przykłady
Poniższe przykłady demonstrują dane wyjściowe make_interval()
podczas korzystania z różnych stylów wyjściowych.
sql_standard
Ten styl jest zgodny ze specyfikacją standardu SQL dla ciągów literału interwału, jeśli wartość interwału spełnia ograniczenia normy (tylko rok, miesiąc lub tylko dzień, bez mieszania składników dodatnich i ujemnych).
W przeciwnym razie wynik wygląda jak standardowy ciąg literałowy rok-miesiąc, po którym następuje ciąg literału dziennego, z wyraźnymi znakami dodanymi w celu rozróżnienia interwałów między znakami mieszanymi.
Oto przykład wykorzystujący rok-miesiąc.
SET intervalstyle = 'sql_standard';
SELECT make_interval(years => 1, months => 2);
Wynik:
1-2
Poniżej znajduje się kolejny przykład. Tym razem określam lata, miesiące, tygodnie, dni, godziny, minuty i sekundy.
SET intervalstyle = 'sql_standard';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Wynik:
+1-2 +25 +5:06:07
postgres
postgress
jest ustawieniem domyślnym.
Ten styl pasuje do wyników wydań Postgresa przed wersją 8.4, gdy DateStyle
parametr został ustawiony na ISO
.
SET intervalstyle = 'postgres';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Wynik:
1 year 2 mons 25 days 05:06:07
postgres_verbose
Ten styl pasuje do wyników wydań Postgresa przed wersją 8.4, gdy DateStyle
parametr został ustawiony na inny niż ISO
wyjście.
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
Ten styl pasuje do „formatu z desygnatorami” opisanego w sekcji 4.4.3.2 normy ISO 8601.
SET intervalstyle = 'iso_8601';
SELECT make_interval(1, 2, 3, 4, 5, 6, 7);
Wynik:
P1Y2M25DT5H6M7S