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

Zwróć listę stref czasowych obsługiwanych przez PostgreSQL

Podczas pracy z PostgreSQL możesz czasami znaleźć się w sytuacji, w której potrzebujesz listy stref czasowych rozpoznawanych przez Postgres.

Na przykład możesz próbować ustawić strefę czasową dla bieżącej sesji lub możesz użyć jednej z funkcji datetime, które umożliwiają manipulowanie strefą czasową.

Poniżej znajdują się dwa widoki i dwie funkcje, które zwracają listę stref czasowych.

Widok pg_timezone_abbrevs

pg_timezone_abbrevs Widok zawiera listę skrótów stref czasowych, które są obecnie rozpoznawane przez funkcje daty/godziny.

Oto jak wygląda 10 górnych rzędów:

SELECT * 
FROM pg_timezone_abbrevs
LIMIT 10;

Wynik:

abbrev  | utc_offset | is_dst
--------+------------+--------
ACDT    | 10:30:00   | t
ACSST   | 10:30:00   | t
ACST    | 09:30:00   | f
ACT     | -05:00:00  | f
ACWST   | 08:45:00   | f
ADT     | -03:00:00  | t
AEDT    | 11:00:00   | t
AESST   | 11:00:00   | t
AEST    | 10:00:00   | f
AFT     | 04:30:00   | f

is_dst kolumna wskazuje, czy jest to skrót czasu letniego.

Zwróć uwagę, że zawartość tego widoku zmienia się, gdy timezone_abbreviations parametr run-time został zmodyfikowany.

Zwróć też uwagę, że dokumentacja Postgresa stwierdza:

Podczas gdy większość skrótów stref czasowych reprezentuje stałe przesunięcia względem czasu UTC, istnieją takie, które historycznie różniły się wartością (więcej informacji znajduje się w sekcji B.4). W takich przypadkach ten widok przedstawia ich aktualne znaczenie.

Funkcja pg_timezone_abbrevs()

Możesz alternatywnie użyć pg_timezone_abbrevs() funkcja zwracająca wyniki jako SETOF.

SELECT pg_timezone_abbrevs()
LIMIT 10;

Wynik:

pg_timezone_abbrevs
-------------------
(ACDT,10:30:00,t)
(ACSST,10:30:00,t)
(ACST,09:30:00,f)
(ACT,-05:00:00,f)
(ACWST,08:45:00,f)
(ADT,-03:00:00,t)
(AEDT,11:00:00,t)
(AESST,11:00:00,t)
(AEST,10:00:00,f)
(AFT,04:30:00,f)

Możesz również użyć następującej składni, aby w razie potrzeby zwrócić wyniki w oddzielnych kolumnach.

SELECT * 
FROM pg_timezone_abbrevs()
LIMIT 10;

Wynik:

abbrev  | utc_offset | is_dst
--------+------------+--------
ACDT    | 10:30:00   | t
ACSST   | 10:30:00   | t
ACST    | 09:30:00   | f
ACT     | -05:00:00  | f
ACWST   | 08:45:00   | f
ADT     | -03:00:00  | t
AEDT    | 11:00:00   | t
AESST   | 11:00:00   | t
AEST    | 10:00:00   | f
AFT     | 04:30:00   | f

Widok pg_timezone_names

pg_timezone_names view zawiera listę nazw stref czasowych, które są rozpoznawane przez SET TIMEZONE , wraz z powiązanymi skrótami, przesunięciami UTC i stanem czasu letniego.

Oto jak wygląda 10 górnych rzędów:

SELECT * 
FROM pg_timezone_names
LIMIT 10;

Wynik:

       name              | abbrev | utc_offset | is_dst 
------------------+--------+------------+--------
 Indian/Mauritius  | +04    | 04:00:00   | f
 Indian/Chagos     | +06    | 06:00:00   | f
 Indian/Mayotte    | EAT    | 03:00:00    | f
 Indian/Christmas  | +07    | 07:00:00    | f
 Indian/Cocos      | +0630  | 06:30:00    | f
 Indian/Maldives   | +05    | 05:00:00    | f
 Indian/Comoro     | EAT    | 03:00:00    | f
 Indian/Reunion    | +04    | 04:00:00    | f
 Indian/Mahe       | +04    | 04:00:00    | f
 Indian/Kerguelen  | +05    | 05:00:00    | f

is_dst kolumna wskazuje, czy strefa czasowa aktualnie stosuje czas letni.

W tym widoku dokumentacja Postgresa stwierdza:

W przeciwieństwie do skrótów pokazanych w pg_timezone_abbrevs , wiele z tych nazw oznacza zestaw reguł dotyczących dat przejścia na czas letni. Dlatego powiązane informacje zmieniają się poza lokalnymi granicami czasu letniego. Wyświetlane informacje są obliczane na podstawie bieżącej wartości CURRENT_TIMESTAMP .

Funkcja pg_timezone_names()

Możesz także użyć pg_timezone_names() funkcja zwracająca wyniki jako SETOF.

SELECT pg_timezone_names()
LIMIT 10;

Wynik:

pg_timezone_names
---------------------------------
(Indian/Mauritius,+04,04:00:00,f)
(Indian/Chagos,+06,06:00:00,f)
(Indian/Mayotte,EAT,03:00:00,f)
(Indian/Christmas,+07,07:00:00,f)
(Indian/Cocos,+0630,06:30:00,f)
(Indian/Maldives,+05,05:00:00,f)
(Indian/Comoro,EAT,03:00:00,f)
(Indian/Reunion,+04,04:00:00,f)
(Indian/Mahe,+04,04:00:00,f)
(Indian/Kerguelen,+05,05:00:00,f)

Możesz również użyć następującej składni, aby zwrócić wyniki w oddzielnych kolumnach.

SELECT * FROM pg_timezone_names()
LIMIT 10;

Wynik:

name              | abbrev | utc_offset | is_dst 
------------------+--------+------------+--------
Indian/Mauritius  | +04    | 04:00:00   | f
Indian/Chagos     | +06    | 06:00:00   | f
Indian/Mayotte    | EAT    | 03:00:00   | f
Indian/Christmas  | +07    | 07:00:00   | f
Indian/Cocos      | +0630  | 06:30:00   | f
Indian/Maldives   | +05    | 05:00:00   | f
Indian/Comoro     | EAT    | 03:00:00   | f
Indian/Reunion    | +04    | 04:00:00   | f
Indian/Mahe       | +04    | 04:00:00   | f
Indian/Kerguelen  | +05    | 05:00:00   | f

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Użyj połączenia PostgreSQL SSL w rdzy z certyfikatami z podpisem własnym

  2. Zapytanie PostgreSQL ILIKE z SQLAlchemy

  3. Jak Mod() działa w PostgreSQL

  4. Połącz się z bazą danych PostgreSQL w kontenerze Docker

  5. Czy INSERT RETURNING gwarantuje zwrot rzeczy we właściwej kolejności?