sql >> Database teknologi >  >> RDS >> PostgreSQL

Returner en liste over tidszoner, der understøttes af PostgreSQL

Når du arbejder med PostgreSQL, kan du af og til stå i den situation, hvor du har brug for en liste over tidszoner, som Postgres genkender.

For eksempel kan du prøve at indstille tidszonen for din aktuelle session, eller du kan bruge en af ​​datetime-funktionerne, der giver dig mulighed for at manipulere tidszonen.

Nedenfor er to visninger og to funktioner, der returnerer en liste over tidszoner.

Pg_timezone_abbrevs-visningen

pg_timezone_abbrevs visningen giver en liste over tidszoneforkortelser, der i øjeblikket genkendes af datetime-funktionerne.

Sådan ser de øverste 10 rækker ud:

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 kolonne angiver, om dette er en sommerforkortelse eller ej.

Bemærk, at indholdet af denne visning ændres, når timezone_abbreviations runtime parameter er ændret.

Bemærk også, at Postgres-dokumentationen siger:

Mens de fleste tidszoneforkortelser repræsenterer faste forskydninger fra UTC, er der nogle, der historisk har varieret i værdi (se afsnit B.4 for mere information). I sådanne tilfælde præsenterer dette synspunkt deres nuværende betydning.

Pg_timezone_abbrevs()-funktionen

Du kan alternativt bruge pg_timezone_abbrevs() funktion for at returnere resultaterne som et 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 også bruge følgende syntaks til at returnere resultaterne i separate kolonner, hvis det kræves.

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

Pg_timezone_names-visningen

pg_timezone_names visningen giver en liste over tidszonenavne, der genkendes af SET TIMEZONE , sammen med deres tilknyttede forkortelser, UTC-forskydninger og sommertid-status.

Sådan ser de øverste 10 rækker ud:

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 kolonne angiver, om tidszonen i øjeblikket observerer sommertid eller ej.

Til denne visning står der i Postgres-dokumentationen:

I modsætning til forkortelserne vist i pg_timezone_abbrevs , indebærer mange af disse navne et sæt regler for overgangsdato for sommertid. Derfor ændres de tilknyttede oplysninger på tværs af lokale sommertid-grænser. De viste oplysninger er beregnet ud fra den aktuelle værdi af CURRENT_TIMESTAMP .

Pg_timezone_names()-funktionen

Du kan også bruge pg_timezone_names() funktion for at returnere resultaterne som et 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 også bruge følgende syntaks til at returnere resultaterne i separate kolonner.

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. Hurtigste måde at finde afstand mellem to Lat/Long-punkter

  2. Oracle-partition efter nøgleord

  3. Simpel Slony-I-replikeringsopsætning.

  4. Find det samlede antal resultater i mySQL-forespørgsel med offset+limit