PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Връщане на списък с часови зони, поддържани от PostgreSQL

Когато работите с PostgreSQL, понякога може да се окажете в ситуация, в която имате нужда от списък с часови зони, които Postgres разпознава.

Например, може да се опитвате да зададете часовата зона за текущата си сесия или може да използвате една от функциите за дата и час, които ви позволяват да манипулирате часовата зона.

По-долу са два изгледа и две функции, които връщат списък с часови зони.

Изгледът pg_timezone_abbrevs

pg_timezone_abbrevs view предоставя списък на съкращенията на часовите зони, които в момента се разпознават от функциите за дата и час.

Ето как изглеждат първите 10 реда:

SELECT * 
FROM pg_timezone_abbrevs
LIMIT 10;

Резултат:

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 колона показва дали това е съкращение за лятно часово време или не.

Имайте предвид, че съдържанието на този изглед се променя, когато timezone_abbreviations параметърът на изпълнение е променен.

Също така имайте предвид, че документацията на Postgres гласи:

Докато повечето съкращения на часовите зони представляват фиксирани измествания спрямо UTC, има някои, които исторически са се различавали по стойност (вижте раздел B.4 за повече информация). В такива случаи този изглед представя тяхното текущо значение.

Функцията pg_timezone_abbrevs()

Като алтернатива можете да използвате pg_timezone_abbrevs() функция за връщане на резултатите като SETOF.

SELECT pg_timezone_abbrevs()
LIMIT 10;

Резултат:

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)

Можете също да използвате следния синтаксис, за да върнете резултатите в отделни колони, ако е необходимо.

SELECT * 
FROM pg_timezone_abbrevs()
LIMIT 10;

Резултат:

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

pg_timezone_names view предоставя списък с имена на часови зони, които се разпознават от SET TIMEZONE , заедно със свързаните им съкращения, UTC измествания и статус на лятното часово време.

Ето как изглеждат първите 10 реда:

SELECT * 
FROM pg_timezone_names
LIMIT 10;

Резултат:

       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 колоната показва дали часовата зона в момента спазва лятното часово време.

За този изглед документацията на Postgres гласи:

За разлика от съкращенията, показани в pg_timezone_abbrevs , много от тези имена предполагат набор от правила за преходна дата на лятно часово време. Следователно, свързаната информация се променя през местните граници на DST. Показаната информация се изчислява въз основа на текущата стойност на CURRENT_TIMESTAMP .

Функцията pg_timezone_names()

Можете също да използвате pg_timezone_names() функция за връщане на резултатите като SETOF.

SELECT pg_timezone_names()
LIMIT 10;

Резултат:

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)

Можете също да използвате следния синтаксис, за да върнете резултатите в отделни колони.

SELECT * FROM pg_timezone_names()
LIMIT 10;

Резултат:

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. СЪЗДАВАНЕ НА ЕЗИК plpython3u – PostgreSQL 9.6

  2. Върнете SETOF редове от функцията PostgreSQL

  3. Как Postgresql COPY TO STDIN с CSV се актуализира при конфликт?

  4. Как да картографирате PostgreSQL масив с Hibernate

  5. Вмъкнете речника на Python с помощта на Psycopg2