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

Jak make_timestamptz() działa w PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć użytkownika dla bazy danych w postgresql?

  2. Rozpakuj wiele tablic równolegle

  3. Postgres SELECT gdzie WHERE jest UUID lub ciągiem

  4. Replikacja Londiste z PostgreSQL 9.0

  5. Kontynuacja transakcji po błędzie naruszenia klucza podstawowego