PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Tính toán DST trong Postgres, khi chọn các mục đã lên lịch

Sử dụng dấu thời gian timestamp with time zone (timestamptz ) để tính toán.
Thời gian báo thức có thể là time [without time zone] .
Nhưng bạn phải lưu múi giờ rõ ràng cho mọi hàng.

Không bao giờ sử dụng time with time zone Đây là một loại bị hỏng về mặt logic, việc sử dụng nó không được PostgreSQL khuyến khích. Hướng dẫn:

Thiết lập 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.

Nó phải là múi giờ tên (không phải chữ viết tắt) để tính DST. Có liên quan:

Nhận báo thức phù hợp cho "hôm nay":

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) ... lắp ráp timestamp [without time zone] Cũng có thể chỉ là now()::date + t cho "hôm nay".
  • AT WITH TIME ZONE tz ... đặt dấu thời gian tại múi giờ đã lưu, dẫn đến timestamptz .
  • AT WITH TIME ZONE 'UTC' ... lấy theo UTC timestamp
  • ::time ... cách đơn giản nhất để trích xuất thành phần thời gian.

Tại đây, bạn có thể tra cứu tên múi giờ :

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

SQL Fiddle trình diễn mùa hè / mùa đông.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. phần trăm từ dữ liệu biểu đồ

  2. PostgreSQL là cơ sở dữ liệu tốt nhất thế giới

  3. Làm cách nào để có được biểu diễn Hàng của một bảng đã tạo?

  4. Bảng sắp xếp SQL dựa trên hai trường có thể hoán đổi cho nhau

  5. Tổng hợp kết nối PostgreSQL:Phần 3 - Pgpool-II