Làm việc với thông tin múi giờ

Phân tích chuỗi thời gian trong PostgreSQL

Jasmin Ludolf

Content Developer, DataCamp

Dữ liệu múi giờ

  • TIMESTAMP: ngày giờ không kèm múi giờ

    • Phù hợp khi dùng một múi giờ
    • Tất cả thời gian ở UTC
  • TIMESTAMPTZ: ngày giờ có múi giờ

Minh họa bốn mặt đồng hồ với thời gian khác nhau.

Phân tích chuỗi thời gian trong PostgreSQL

Tên múi giờ

SELECT * FROM pg_timezone_names;
| name             |abbrev|utc_offset|is_dst|
|------------------|------|----------|------|
|Africa/Abidjan    |GMT   |  00:00:00|false |
|Africa/Accra      |GMT   |  00:00:00|false |
|Africa/Addis_Ababa|EAT   |   3:00:00|false |
...
  • is_dst: vị trí có áp dụng giờ mùa hè hay không
Phân tích chuỗi thời gian trong PostgreSQL

Xem múi giờ

SHOW TIMEZONE;
|TimeZone       |
|---------------|
|Europe/Brussels|
Phân tích chuỗi thời gian trong PostgreSQL

Dữ liệu múi giờ trong bảng

  • Bảng datetimes có hai trường:
    • datetime: TIMESTAMP
    • datetimetz: TIMESTAMPTZ
INSERT INTO datetimes (datetime, datetimetz)
VALUES('2023-01-03 12:00:00','2023-01-03 12:00:00');
|datetime           |datetimetz               |
|-------------------|-------------------------|
|2023-01-03 12:00:00|2023-01-03 12:00:00+01:00|
Phân tích chuỗi thời gian trong PostgreSQL

Xác minh kiểu dữ liệu

  • pg_typeof(field_name): kiểm tra kiểu dữ liệu của trường
SELECT
    pg_typeof(datetime) AS "type of(datetime)", 
    pg_typeof(datetimetz) AS "type of(datetimetz)"
FROM datetimes;
|type of(datetime)          |type of(datetimetz)     |
|---------------------------|------------------------|
|timestamp without time zone|timestamp with time zone|
Phân tích chuỗi thời gian trong PostgreSQL

Sử dụng thông tin múi giờ

INSERT INTO datetimes (datetime, datetimetz)
VALUES('2023-01-03 12:00:00+00','2023-01-03 12:00:00+00');
SELECT * FROM datetimes;
|datetime           |datetimetz               |
|-------------------|-------------------------|
|2023-01-03 12:00:00|2023-01-03 12:00:00+01:00|
|2023-01-03 12:00:00|2023-01-03 13:00:00+01:00|
Phân tích chuỗi thời gian trong PostgreSQL

Thêm thông tin múi giờ

  • AT TIME ZONE: thêm, đổi hoặc bỏ thông tin múi giờ
    • Chuyển kiểu giữa TIMESTAMPTIMESTAMPTZ

Thêm múi giờ:

SELECT 
    TIMESTAMP '2020-12-31 23:59:59' AT TIME ZONE 'Europe/London' AS added;
|added                    |
|-------------------------|
|2021-01-01 00:59:59+01:00|

Truy vấn này: diễn giải timestamp, tạo TIMESTAMPTZ, hiển thị mặc định

Phân tích chuỗi thời gian trong PostgreSQL

Đổi và bỏ múi giờ

SELECT 
    '2020-12-31 23:59:59+00'::TIMESTAMPTZ AT TIME ZONE 'Europe/Paris' 
    AS shifted;
|shifted            |
|-------------------|
|2021-01-01 00:59:59|

Truy vấn này: đổi timestamp sang múi giờ mong muốn, bỏ chỉ định múi giờ

Phân tích chuỗi thời gian trong PostgreSQL

Ayo berlatih!

Phân tích chuỗi thời gian trong PostgreSQL

Preparing Video For Download...