sql >> Databasteknik >  >> RDS >> PostgreSQL

Returnera en lista över tidszoner som stöds av PostgreSQL

När du arbetar med PostgreSQL kan du ibland hamna i situationen där du behöver en lista över tidszoner som Postgres känner igen.

Du kan till exempel försöka ställa in tidszonen för din nuvarande session, eller så kan du använda en av datetime-funktionerna som låter dig manipulera tidszonen.

Nedan finns två vyer och två funktioner som returnerar en lista med tidszoner.

Vyn pg_timezone_abbrevs

pg_timezone_abbrevs vyn ger en lista över tidszonförkortningar som för närvarande känns igen av datetime-funktionerna.

Så här ser de 10 översta raderna ut:

SELECT * 
FROM pg_timezone_abbrevs
LIMIT 10;

Resultat:

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 kolumnen anger om detta är en sommartidsförkortning eller inte.

Observera att innehållet i denna vy ändras när timezone_abbreviations körtidsparametern ändras.

Observera också att Postgres-dokumentationen säger:

Medan de flesta tidszonförkortningar representerar fasta förskjutningar från UTC, finns det några som historiskt har varierat i värde (se avsnitt B.4 för mer information). I sådana fall presenterar denna uppfattning sin nuvarande innebörd.

Pg_timezone_abbrevs()-funktionen

Du kan alternativt använda pg_timezone_abbrevs() funktion för att returnera resultaten som en SETOF.

SELECT pg_timezone_abbrevs()
LIMIT 10;

Resultat:

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)

Du kan också använda följande syntax för att returnera resultaten i separata kolumner om det behövs.

SELECT * 
FROM pg_timezone_abbrevs()
LIMIT 10;

Resultat:

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

Vyn pg_timezone_names

pg_timezone_names vyn tillhandahåller en lista över tidszonsnamn som känns igen av SET TIMEZONE , tillsammans med tillhörande förkortningar, UTC-förskjutningar och sommartid.

Så här ser de 10 översta raderna ut:

SELECT * 
FROM pg_timezone_names
LIMIT 10;

Resultat:

       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 kolumnen anger om tidszonen för närvarande har sommartid eller inte.

För denna vy står det i Postgres-dokumentationen:

Till skillnad från förkortningarna som visas i pg_timezone_abbrevs , innebär många av dessa namn en uppsättning regler för övergångsdatum för sommartid. Därför ändras den associerade informationen över lokala sommargränser. Den visade informationen beräknas baserat på det aktuella värdet för CURRENT_TIMESTAMP .

Pg_timezone_names()-funktionen

Du kan också använda pg_timezone_names() funktion för att returnera resultaten som en SETOF.

SELECT pg_timezone_names()
LIMIT 10;

Resultat:

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)

Du kan också använda följande syntax för att returnera resultaten i separata kolumner.

SELECT * FROM pg_timezone_names()
LIMIT 10;

Resultat:

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. Hur listar du primärnyckeln för en SQL Server-tabell?

  2. Har inte databaslås! i android

  3. datetime vs datetimeoffset i SQL Server:Vad är skillnaden?

  4. PostgreSQL-uppdateringar med flera rader i Node.js