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

Отчитане на лятното часово време в Postgres, когато избирате планирани елементи

Използвайте timestamp with time zone (timestamptz ) за изчисления.
Часовете за аларми могат да бъдат time [without time zone] .
Но трябва да запазите часовата зона изрично за всеки ред.

Никога използвайте time with time zone Това е логически счупен тип, използването му не се препоръчва от PostgreSQL. Ръководството:

Демо настройка:

CREATE TABLE alarm(name text, t time, tz text);
INSERT INTO alarm VALUES
  ('Alfred', '04:00', 'Europe/Stockholm') -- Alfred sets an alarm for 4 AM.
, ('Lotta',  '05:00', 'Europe/Stockholm') -- Lotta sets an alarm for 5 AM. 
, ('Sharon', '11:00', 'Asia/Singapore');  -- Sharon has set an alarm for 11 AM.

Трябва да са имена на часовата зона (не съкращения) за отчитане на лятното часово време. Свързани:

Вземете съответстващи аларми за "днес":

SELECT *
FROM   alarm
WHERE  (('2012-07-01'::date + t) AT TIME ZONE tz AT TIME ZONE 'UTC')::time
       = '03:00'::time
  • ('2012-7-1'::date + t) ... сглобете timestamp [without time zone] Може също да бъде просто now()::date + t за "днес".
  • AT WITH TIME ZONE tz ... поставете клеймо за време в запазената часова зона, което води до timestamptz .
  • AT WITH TIME ZONE 'UTC' ... вземете според UTC timestamp
  • ::time ... най-лесният начин за извличане на времевия компонент.

Тук можете да търсите имена на часови зони :

SELECT *
FROM   pg_timezone_names
WHERE  name ~~* '%sing%'
LIMIT  10

SQL Fiddle демонстриране на лято/зима.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Концепции за висока достъпност на Oracle в PostgreSQL

  2. Тригер за актуализиране на PostgreSQL

  3. Postgres UTC формат на дата и епоха, инверсия на знака

  4. Таблица за съкращаване на Postgresql с ограничение за външен ключ

  5. Как да намеря най-голямата стойност в колона в postgres sql?