PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Rozliczanie czasu letniego w Postgresie przy wyborze zaplanowanych pozycji

Użyj timestamp with time zone (timestamptz ) do obliczeń.
Czasy alarmów mogą być time [without time zone] .
Ale musisz zapisać strefę czasową wyraźnie dla każdego wiersza.

Nigdy użyj time with time zone Jest to logicznie zepsuty typ, jego użycie jest odradzane przez PostgreSQL. Podręcznik:

Konfiguracja demonstracyjna:

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.

To musi być strefa czasowa nazwy (nie skróty), aby uwzględnić czas letni. Powiązane:

Pobierz pasujące alarmy dla „dzisiaj”:

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) ... złóż timestamp [without time zone] Może też być po prostu now()::date + t na „dzisiaj”.
  • AT WITH TIME ZONE tz ... umieść znacznik czasu w zapisanej strefie czasowej, w wyniku czego timestamptz .
  • AT WITH TIME ZONE 'UTC' ... uzyskaj zgodnie z UTC timestamp
  • ::time ... najprostszy sposób na wyodrębnienie składnika czasu.

Tutaj możesz wyszukać nazwy stref czasowych :

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

Skrzypce SQL demonstracja lato/zima.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zainstaluj psycopg2 na Ubuntu

  2. Uśpienie komety PHP blokuje apache mpm?

  3. BŁĄD:wartość null w kolumnie id narusza ograniczenie o wartości null

  4. Sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)

  5. Maksymalna wartość rzędowa (z n kolumn) - Eleganckie podejście