W PostgreSQL funkcja make_timestamptz()
funkcja umożliwia utworzenie znacznika czasu ze strefą czasową z pól roku, miesiąca, dnia, godziny, minut i sekund, a także z opcjonalnego pola strefy czasowej.
Składnia
Funkcja ma następującą składnię:
make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])
Gdzie year
, month
i day
są liczbami całkowitymi reprezentującymi rok, miesiąc i dzień daty oraz hour
to część godzinowa, min
to część minut, a sec
to druga część.
Godzina i minuty są podawane jako liczba całkowita , sekundy są podawane jako podwójna precyzja .
Opcjonalna timezone
argument dotyczy strefy czasowej. Jeśli nie jest określony, używana jest bieżąca strefa czasowa.
Wynik jest zwracany jako czas ze strefą czasową .
Przykład
Oto podstawowy przykład do zademonstrowania.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);
Wynik:
1999-03-14 10:35:12.15+10
W tym przypadku nie podałem strefy czasowej, więc użyłem bieżącej strefy czasowej.
Możemy zweryfikować typ zwrotu za pomocą następującego zapytania.
SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));
Wynik:
timestamp with time zone
pg_typeof()
funkcja zwraca typ danych swojego argumentu, więc przekazałem make_timestamptz()
jako argument.
Określ strefę czasową
W tym przykładzie wyraźnie podaję strefę czasową.
SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');
Wynik:
1999-03-14 16:35:12.15+10
Oto kolejny przykład, ale z różnymi wartościami stref czasowych.
\x
SELECT
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');
Wynik (przy użyciu wyjścia pionowego):
make_timestamptz | 1999-12-31 23:31:00+10 make_timestamptz | 2000-01-01 00:31:00+10 make_timestamptz | 2000-01-01 15:01:00+10 make_timestamptz | 2000-01-01 09:01:00+10 make_timestamptz | 2000-01-01 11:01:00+10 make_timestamptz | 1999-12-31 21:01:00+10
W tym przykładzie użyłem \x
w celu włączenia rozszerzonego wyświetlania (znanego również jako „wyjście pionowe”) w celu ułatwienia odczytania wyników.
Wprowadzanie \x
przełącza rozszerzone wyświetlanie (tzn. włącza i wyłącza go).
Zobacz Zwracanie listy stref czasowych obsługiwanych przez PostgreSQL, aby uzyskać listę prawidłowych stref czasowych.
Poza zasięgiem
Jeśli którykolwiek z argumentów jest poza zakresem możliwych wartości dla jego części daty, otrzymasz błąd „poza zakresem”.
SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);
Wynik:
ERROR: date field value out of range: 1999-03-32
W tym przypadku dzień był 32, czyli poza zakresem, więc komunikat wyjaśniał, że wartość pola daty jest poza zakresem.
Jeśli tylko wartość pola czasu jest poza zakresem, błąd jest odpowiednio sformułowany.
SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);
Wynik:
ERROR: time field value out of range: 10:61:12.15
W tym przypadku minutes
argumentem jest 61, co jest poza zakresem.
Stempel czasu bez strefy czasowej
Aby utworzyć znacznik czasu bez strefy czasowej, użyj make_timestamp()
funkcja.