PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak make_timestamp() działa w PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy powinienem określić zarówno INDEX, jak i UNIQUE INDEX?

  2. IN kontra DOWOLNY operator w PostgreSQL

  3. Zmiana z SQLite na PostgreSQL w nowym projekcie Rails

  4. postgres - gdzie w (lista) - kolumna nie istnieje

  5. Jak stworzyć nową bazę danych z już zainstalowanym rozszerzeniem hstore?