W PostgreSQL funkcja make_timestamp()
funkcja umożliwia utworzenie znacznika czasu z pól roku, miesiąca, dnia, godziny, minuty i sekundy.
Składnia
Funkcja ma następującą składnię:
make_timestamp(year int, month int, day int, hour int, min int, sec double precision)
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 .
Wynik jest zwracany jako sygnatura czasowa . Dokładniej, jest zwracany jako czas bez strefy czasowej .
Przykład
Oto podstawowy przykład do zademonstrowania.
SELECT make_timestamp(2020, 10, 25, 9, 30, 17.12);
Wynik:
2020-10-25 09:30:17.12
I możemy zweryfikować typ zwrotu za pomocą następującego zapytania.
SELECT pg_typeof(make_timestamp(2020, 10, 25, 9, 30, 17.12));
Wynik:
timestamp without time zone
pg_typeof()
funkcja zwraca typ danych swojego argumentu, więc przekazałem make_timestamp()
jako argument..
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_timestamp(2020, 13, 25, 9, 30, 17.12);
Wynik:
ERROR: date field value out of range: 2020-13-25
W tym przypadku miesiąc był 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_timestamp(2020, 10, 25, 25, 30, 17.12);
Wynik:
ERROR: time field value out of range: 25:30:17.12
Przekazywanie ciągów jako argumentów
Dokumentacja Postgresa stwierdza, że argumenty muszą być liczbami całkowitymi (i podwójnej precyzji w przypadku seconds
argument), ale przekazywanie łańcuchów również działa (prawdopodobnie dlatego, że są one niejawnie konwertowane na liczby całkowite), o ile każdy argument znajduje się we właściwym zakresie.
SELECT make_timestamp('2020', '12', '25', '10', '30', '17.12');
Wynik:
2020-12-25 10:30:17.12
Ponownie możemy użyć pg_type()
aby sprawdzić wynikowy typ danych.
SELECT pg_typeof(make_timestamp('2020', '12', '25', '10', '30', '17.12'));
Wynik:
timestamp without time zone
Jednak nadal musisz upewnić się, że każdy argument będzie prawidłowy po przekonwertowaniu na liczbę całkowitą, w przeciwnym razie otrzymasz błąd.
SELECT pg_typeof(make_timestamp('2020', '13', '25', '10', '30', '17.12'));
Wynik:
ERROR: date field value out of range: 2020-13-25
Stempel czasowy ze strefą czasową
Aby utworzyć sygnaturę czasową ze strefą czasową wartość, użyj make_timestamptz()
funkcja.