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

Sự khác biệt giữa các dấu thời gian có / không có múi giờ trong PostgreSQL

Sự khác biệt được đề cập trong tài liệu PostgreSQL cho các loại ngày / giờ. Có, xử lý TIME hoặc TIMESTAMP khác nhau giữa một WITH TIME ZONE hoặc WITHOUT TIME ZONE . Nó không ảnh hưởng đến cách các giá trị được lưu trữ; nó ảnh hưởng đến cách chúng được diễn giải.

Ảnh hưởng của múi giờ đối với các loại dữ liệu này được đề cập cụ thể trong tài liệu. Sự khác biệt phát sinh từ những gì hệ thống có thể biết một cách hợp lý về giá trị:

  • Với múi giờ là một phần của giá trị, giá trị có thể được hiển thị dưới dạng giờ địa phương trong ứng dụng khách.

  • Không có múi giờ như một phần của giá trị, múi giờ mặc định rõ ràng là UTC, vì vậy múi giờ được hiển thị cho múi giờ đó.

Hành vi khác nhau tùy thuộc vào ít nhất ba yếu tố:

  • Cài đặt múi giờ trong ứng dụng khách.
  • Loại dữ liệu (tức là WITH TIME ZONE hoặc WITHOUT TIME ZONE ) của giá trị.
  • Liệu giá trị có được chỉ định với một múi giờ cụ thể hay không.

Dưới đây là các ví dụ về sự kết hợp của các yếu tố đó:

foo=> SET TIMEZONE TO 'Japan';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 00:00:00+09
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 06:00:00+09
(1 row)

foo=> SET TIMEZONE TO 'Australia/Melbourne';
SET
foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 00:00:00+11
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP;
      timestamp      
---------------------
 2011-01-01 00:00:00
(1 row)

foo=> SELECT '2011-01-01 00:00:00+03'::TIMESTAMP WITH TIME ZONE;
      timestamptz       
------------------------
 2011-01-01 08:00:00+11
(1 row)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tổng quan về các phương thức JOIN trong PostgreSQL

  2. Sự khác biệt giữa loại dữ liệu DECIMAL và NUMERIC trong PSQL

  3. Giao điểm của nhiều mảng trong PostgreSQL

  4. Cách Atand () hoạt động trong PostgreSQL

  5. Cách thanh lịch nhất để lưu trữ dấu thời gian với nanosec trong postgresql là gì?