sql >> Database >  >> RDS >> PostgreSQL

Retourneer een lijst met tijdzones die worden ondersteund door PostgreSQL

Wanneer u met PostgreSQL werkt, kunt u zich af en toe in de situatie bevinden waarin u een lijst met tijdzones nodig heeft die Postgres herkent.

U kunt bijvoorbeeld proberen de tijdzone voor uw huidige sessie in te stellen, of u kunt een van de datetime-functies gebruiken waarmee u de tijdzone kunt manipuleren.

Hieronder staan ​​twee weergaven en twee functies die een lijst met tijdzones retourneren.

De pg_timezone_ambrevs-weergave

De pg_timezone_abbrevs view biedt een lijst met afkortingen voor tijdzones die momenteel worden herkend door de datetime-functies.

Zo zien de bovenste 10 rijen eruit:

SELECT * 
FROM pg_timezone_abbrevs
LIMIT 10; 

Resultaat:

afkorting | utc_offset | is_dst--------+------------+--------ACDT | 10:30:00 | tACSST | 10:30:00 | tACST | 09:30:00 | FEIT | -05:00:00 | fACWST | 08:45:00 | fADT | -03:00:00 | tAEDT | 11:00:00 | TAESST | 11:00:00 | TAEST | 10:00:00 | fAFT | 04:30:00 | f

De is_dst kolom geeft aan of dit een afkorting voor zomertijd is.

Merk op dat de inhoud van deze weergave verandert wanneer de timezone_abbreviations runtime-parameter is gewijzigd.

Merk ook op dat in de Postgres-documentatie staat:

Hoewel de meeste afkortingen voor tijdzones vaste offsets van UTC vertegenwoordigen, zijn er enkele die historisch gezien in waarde varieerden (zie Sectie B.4 voor meer informatie). In dergelijke gevallen geeft deze weergave hun huidige betekenis weer.

De pg_timezone_ambrevs() Functie

U kunt ook de pg_timezone_abbrevs() . gebruiken functie om de resultaten als een SETOF terug te geven.

SELECT pg_timezone_abbrevs()
LIMIT 10; 

Resultaat:

pg_timezone_ambrevs-------------------(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)

U kunt indien nodig ook de volgende syntaxis gebruiken om de resultaten in afzonderlijke kolommen te retourneren.

SELECT * 
FROM pg_timezone_abbrevs()
LIMIT 10; 

Resultaat:

afkorting | utc_offset | is_dst--------+------------+--------ACDT | 10:30:00 | tACSST | 10:30:00 | tACST | 09:30:00 | FEIT | -05:00:00 | fACWST | 08:45:00 | fADT | -03:00:00 | tAEDT | 11:00:00 | TAESST | 11:00:00 | TAEST | 10:00:00 | fAFT | 04:30:00 | f

De weergave pg_timezone_names

De pg_timezone_names view biedt een lijst met tijdzonenamen die worden herkend door SET TIMEZONE , samen met de bijbehorende afkortingen, UTC-offsets en zomertijdstatus.

Zo zien de bovenste 10 rijen eruit:

SELECT * 
FROM pg_timezone_names
LIMIT 10; 

Resultaat:

naam              | afkorting | utc_offset | is_dst ------------------+--------+------------+-------- Indiaas/Mauritius  | +04    | 04:00:00   | f Indiaas/Chagos     | +06    | 06:00:00   | f Indiaas/Mayotte    | ETEN    | 03:00:00   | f Indiaas/Kerst  | +07    | 07:00:00   | f Indiaas/Cocos      | +0630  | 06:30:00   | f Indiaas/Malediven   | +05    | 05:00:00   | f Indiaas/Comoro     | ETEN    | 03:00:00   | f Indiaas/Réunion    | +04    | 04:00:00   | f Indiaas/Mahe       | +04    | 04:00:00   | f Indiaas/Kerguelen  | +05    | 05:00:00   | f

De is_dst kolom geeft aan of de tijdzone momenteel zomertijd in acht neemt.

Voor deze weergave vermeldt de Postgres-documentatie:

In tegenstelling tot de afkortingen die worden weergegeven in pg_timezone_abbrevs , impliceren veel van deze namen een reeks regels voor de overgangsdatum voor zomertijd. Daarom verandert de bijbehorende informatie over lokale DST-grenzen heen. De weergegeven informatie wordt berekend op basis van de huidige waarde van CURRENT_TIMESTAMP .

De functie pg_timezone_names()

U kunt ook de pg_timezone_names() . gebruiken functie om de resultaten als een SETOF terug te geven.

SELECT pg_timezone_names()
LIMIT 10; 

Resultaat:

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

U kunt ook de volgende syntaxis gebruiken om de resultaten in afzonderlijke kolommen te retourneren.

SELECT * FROM pg_timezone_names()
LIMIT 10; 

Resultaat:


  1. Gegevens exporteren uit een MySQL-database

  2. Incrementele databasewijzigingen detecteren (Oracle naar MongoDB ETL)

  3. Hoe een tabel met beperkte externe sleutels af te kappen?

  4. Moeten SQL-verbindingen die met PDO in PHP zijn geopend, worden gesloten?