PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Akuntansi untuk DST di Postgres, saat memilih item terjadwal

Gunakan timestamp with time zone (timestamptz ) untuk perhitungan.
Waktu untuk alarm dapat berupa time [without time zone] .
Tapi Anda harus menyimpan zona waktu secara eksplisit untuk setiap baris.

Tidak pernah gunakan time with time zone Ini adalah tipe yang rusak secara logis, penggunaannya tidak disarankan oleh PostgreSQL. Manual:

Penyiapan demo:

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.

Itu harus zona waktu nama (bukan singkatan) untuk memperhitungkan DST. Terkait:

Dapatkan alarm yang cocok untuk "hari ini":

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) ... merakit timestamp [without time zone] Bisa juga now()::date + t untuk "hari ini".
  • AT WITH TIME ZONE tz ... tempatkan stempel waktu di zona waktu yang disimpan, menghasilkan timestamptz .
  • AT WITH TIME ZONE 'UTC' ... dapatkan sesuai timestamp UTC
  • ::time ... cara paling sederhana untuk mengekstrak komponen waktu.

Di sini Anda dapat mencari nama zona waktu :

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

SQL Fiddle mendemonstrasikan musim panas / musim dingin.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa memverifikasi di Postgresql bahwa JSON valid?

  2. Pergi dan IN klausa di Postgres

  3. TANGGAL ADD fungsi di PostgreSQL

  4. Bagaimana cara terhubung ke server PostgreSQL melalui JDBC di Android?

  5. sqlalchemy dengan postgres:masukkan ke dalam tabel yang kolomnya memiliki tanda kurung