sql >> Databáze >  >> RDS >> PostgreSQL

Vraťte seznam časových pásem podporovaných PostgreSQL

Při práci s PostgreSQL se občas můžete dostat do situace, kdy potřebujete seznam časových pásem, které Postgres rozpoznává.

Můžete se například pokoušet nastavit časové pásmo pro vaši aktuální relaci nebo můžete používat jednu z funkcí datetime, která vám umožňuje manipulovat s časovým pásmem.

Níže jsou dvě zobrazení a dvě funkce, které vracejí seznam časových pásem.

Zobrazení pg_timezone_abbrevs

pg_timezone_abbrevs zobrazení poskytuje seznam zkratek časových pásem, které jsou aktuálně rozpoznávány funkcemi datetime.

Zde je návod, jak vypadá prvních 10 řádků:

SELECT * 
FROM pg_timezone_abbrevs
LIMIT 10;

Výsledek:

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 sloupec označuje, zda se jedná o zkratku pro letní čas.

Všimněte si, že obsah tohoto zobrazení se změní, když timezone_abbreviations run-time parametr je upraven.

Všimněte si také, že dokumentace Postgres uvádí:

Zatímco většina zkratek časových pásem představuje pevné odchylky od UTC, existují některé, jejichž hodnota se historicky lišila (další informace naleznete v části B.4). V takových případech tento pohled představuje jejich aktuální význam.

Funkce pg_timezone_abbrevs()

Alternativně můžete použít pg_timezone_abbrevs() funkce vrátit výsledky jako SETOF.

SELECT pg_timezone_abbrevs()
LIMIT 10;

Výsledek:

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)

V případě potřeby můžete také použít následující syntaxi k vrácení výsledků v samostatných sloupcích.

SELECT * 
FROM pg_timezone_abbrevs()
LIMIT 10;

Výsledek:

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

Zobrazení pg_timezone_names

pg_timezone_names zobrazení poskytuje seznam názvů časových pásem, které jsou rozpoznány pomocí SET TIMEZONE , spolu s jejich přidruženými zkratkami, offsety UTC a stavem letního času.

Zde je návod, jak vypadá prvních 10 řádků:

SELECT * 
FROM pg_timezone_names
LIMIT 10;

Výsledek:

       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 udává, zda časové pásmo aktuálně platí letní čas.

Pro tento pohled je v dokumentaci Postgres uvedeno:

Na rozdíl od zkratek zobrazených v pg_timezone_abbrevs , mnoho z těchto názvů implikuje sadu pravidel pro datum přechodu na letní čas. Proto se související informace mění přes místní hranice DST. Zobrazené informace jsou vypočítány na základě aktuální hodnoty CURRENT_TIMESTAMP .

Funkce pg_timezone_names()

Můžete také použít pg_timezone_names() funkce vrátit výsledky jako SETOF.

SELECT pg_timezone_names()
LIMIT 10;

Výsledek:

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)

K vrácení výsledků v samostatných sloupcích můžete také použít následující syntaxi.

SELECT * FROM pg_timezone_names()
LIMIT 10;

Výsledek:

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. Jak vytvořit vlastní zástupce v SQL Server Management Studio (SSMS) - SQL Server / kurz TSQL část 10

  2. Zobrazení seznamu PostgreSQL

  3. Vyberte náhodný řádek z tabulky PostgreSQL s váženými pravděpodobnostmi řádků

  4. Jaký je význam 1/1/1753 v SQL Server?