시간대 정보 다루기

PostgreSQL을 활용한 시계열 분석

Jasmin Ludolf

Content Developer, DataCamp

시간대 데이터

  • TIMESTAMP : 시간대 정보가 없는 날짜 및 시간 정보

    • 단일 시간대만 사용할 때 적합
    • 모든 시간은 UTC 기준
  • TIMESTAMPTZ : 시간대 정보가 포함된 날짜 및 시간

서로 다른 시간을 나타내는 네 개의 시계 그림

PostgreSQL을 활용한 시계열 분석

시간대 이름

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을 활용한 시계열 분석

시간대 표시하기

SHOW TIMEZONE;
|TimeZone       |
|---------------|
|Europe/Brussels|
PostgreSQL을 활용한 시계열 분석

테이블의 시간대 데이터

  • 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을 활용한 시계열 분석

시간대 정보 사용하기

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을 활용한 시계열 분석

시간대 정보 추가하기

  • AT TIME ZONE: 시간대 정보 추가, 변경, 제거
    • TIMESTAMP와 TIMESTAMPTZ 간 타입 변환

시간대 추가하기:

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

이 쿼리: 타임스탬프를 해석하고, TIMESTAMPTZ를 생성하며, 기본값을 표시

PostgreSQL을 활용한 시계열 분석

시간대 변경 및 제거

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

이 쿼리: 타임스탬프를 원하는 시간대로 이동시키고, 시간대 표시를 제거

PostgreSQL을 활용한 시계열 분석

연습해 봅시다!

PostgreSQL을 활용한 시계열 분석

Preparing Video For Download...