การทำงานกับข้อมูล time zone

การวิเคราะห์อนุกรมเวลาใน PostgreSQL

Jasmin Ludolf

Content Developer, DataCamp

ข้อมูล time zone

  • TIMESTAMP : ข้อมูลวันที่และเวลาโดยไม่มี time zone

    • เหมาะเมื่อใช้ time zone เดียว
    • เวลาทั้งหมดเป็น UTC
  • TIMESTAMPTZ : วันที่และเวลาพร้อม time zone

ภาพประกอบนาฬิกาสี่หน้าปัดที่แสดงเวลาต่างกัน

การวิเคราะห์อนุกรมเวลาใน PostgreSQL

ชื่อ time zone

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 : บอกว่าพื้นที่นั้นใช้การปรับเวลาตามฤดูกาลอยู่หรือไม่
การวิเคราะห์อนุกรมเวลาใน PostgreSQL

ดู time zone ปัจจุบัน

SHOW TIMEZONE;
|TimeZone       |
|---------------|
|Europe/Brussels|
การวิเคราะห์อนุกรมเวลาใน PostgreSQL

ข้อมูล time zone ในตาราง

  • ตาราง datetimes มีฟิลด์สองฟิลด์ดังนี้:
    • 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|
การวิเคราะห์อนุกรมเวลาใน PostgreSQL

ตรวจสอบชนิดข้อมูล

  • pg_typeof(field_name): ตรวจสอบชนิดข้อมูลของฟิลด์
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|
การวิเคราะห์อนุกรมเวลาใน PostgreSQL

การใช้ข้อมูล time zone

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|
การวิเคราะห์อนุกรมเวลาใน PostgreSQL

การเพิ่มข้อมูล time zone

  • AT TIME ZONE: เพิ่ม เปลี่ยน หรือลบข้อมูล time zone
    • แปลงชนิดข้อมูลระหว่าง TIMESTAMP และ TIMESTAMPTZ และในทางกลับกัน

การเพิ่ม time zone:

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

คิวรีนี้: แปลความหมาย timestamp สร้าง TIMESTAMPTZ และแสดงผลตาม time zone เริ่มต้น

การวิเคราะห์อนุกรมเวลาใน PostgreSQL

การเปลี่ยนและลบ time zone

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

คิวรีนี้: แปลง timestamp ไปยัง time zone ที่ต้องการ และลบข้อมูล time zone ออก

การวิเคราะห์อนุกรมเวลาใน PostgreSQL

มาฝึกกันเถอะ!

การวิเคราะห์อนุกรมเวลาใน PostgreSQL

Preparing Video For Download...