카테고리:

날짜 및 시간 함수

CONVERT_TIMEZONE

타임스탬프를 다른 타임존으로 변환합니다.

구문

CONVERT_TIMEZONE( <source_tz> , <target_tz> , <source_timestamp_ntz> )

CONVERT_TIMEZONE( <target_tz> , <source_timestamp> )
Copy

인자

source_tz

입력 타임스탬프의 타임존을 지정하는 문자열입니다. 타임존이 없는 타임스탬프에 필요합니다(즉, TIMESTAMP_NTZ).

target_tz

입력 타임스탬프를 어느 타임존으로 변환하는지 지정하는 문자열입니다.

source_timestamp_ntz

3개 인자 버전의 경우, 변환할 타임스탬프를 지정하는 문자열입니다(TIMESTAMP_NTZ여야 함).

source_timestamp

2개 버전의 경우, 변환할 타임스탬프를 지정하는 문자열입니다(TIMESTAMP_NTZ 등 모든 타임스탬프 베리언트일 수 있음).

반환

TIMESTAMP_NTZ, TIMESTAMP_TZ 또는 NULL 타입의 값을 반환합니다.

  • 3개 인자 버전의 경우 TIMESTAMP_NTZ 타입의 값을 반환합니다.

  • 2개 인자 버전의 경우 TIMESTAMP_TZ 타입의 값을 반환합니다.

  • 인자가 NULL인 경우 NULL을 반환합니다.

사용법 노트

  • 출력에서 타임스탬프 표시 형식은 현재 세션의 타임스탬프 출력 형식 과 반환된 타임스탬프 값의 데이터 타입으로 결정됩니다.

  • 3개 인자 버전의 경우 결과의 “현지” 시간은 입력 타임존의 “현지 시간” 입력과 동일한 순간을 나타내지만, 대상 타임존의 시간입니다.

  • 2개 인자 버전의 경우 source_timestamp 인자에는 일반적으로 타임존이 포함됩니다. 값이 TIMESTAMP_TZ 형식인 경우, 타임존은 해당 값에서 가져옵니다. 그렇지 않은 경우, 현재 세션 타임존이 사용됩니다.

  • source_tztarget_tz 의 경우, IANA 타임존 데이터베이스 의 릴리스 2021a 에서 타임존 이름 또는 링크 이름 을 지정할 수 있습니다(예: America/Los_Angeles, Europe/London, UTC, Etc/GMT 등).

    참고

    • 타임존 이름은 대/소문자를 구분하며 작은따옴표로 묶어야 합니다 (예: 'UTC').

    • 주어진 약어는 여러 가지 다양한 타임존 중 하나를 가리키므로, Snowflake는 대다수 타임존 약어 (예: PDT, EST 등)를 지원하지 않습니다. 예를 들어, CST 는 북미의 중부 표준시(UTC-6), 쿠바 표준시(UTC-5), 중국 표준시(UTC+8)를 가리킬 수 있습니다.

예에서 반환된 타임스탬프에 기본 타임스탬프 출력 형식 을 사용하려면 현재 세션에서 TIMESTAMP_OUTPUT_FORMAT 매개 변수를 설정 해제합니다.

ALTER SESSION UNSET TIMESTAMP_OUTPUT_FORMAT;
Copy

원본 타임존을 지정하는 예

다음 예에서는 CONVERT_TIMEZONE 함수의 3개 인자 버전을 사용하고 source_tz 값을 지정합니다. 다음 예에서는 TIMESTAMP_NTZ 값을 반환합니다.

로스앤젤레스의 “현지” 시간을 뉴욕에서 그와 일치하는 “현지” 시간으로 변환합니다.

SELECT CONVERT_TIMEZONE(
  'America/Los_Angeles',
  'America/New_York',
  '2024-01-01 14:00:00'::TIMESTAMP_NTZ
) AS conv;
Copy
+-------------------------+
| CONV                    |
|-------------------------|
| 2024-01-01 17:00:00.000 |
+-------------------------+

바르샤바의 “현지” 시간을 UTC 기준으로 그와 일치하는 “현지” 시간으로 변환합니다.

SELECT CONVERT_TIMEZONE(
  'Europe/Warsaw',
  'UTC',
  '2024-01-01 00:00:00'::TIMESTAMP_NTZ
) AS conv;
Copy
+-------------------------+
| CONV                    |
|-------------------------|
| 2023-12-31 23:00:00.000 |
+-------------------------+

원본 타임존을 지정하지 않는 예

다음 예에서는 CONVERT_TIMEZONE 함수의 2개 인자 버전을 사용합니다. 다음 예에서는 TIMESTAMP_TZ 값을 반환합니다. 따라서 반환된 값에는 타임스탬프의 타임존과 협정 세계시(UTC)의 차이를 보여주는 오프셋이 포함됩니다. 예를 들어, America/Los_Angeles 타임존은 UTC보다 7시간 늦음을 표시하기 위해 오프셋이 -0700 입니다.

TIMESTAMP_TZ 값을 지정하는 문자열을 다른 타임존으로 변환합니다.

SELECT CONVERT_TIMEZONE(
  'America/Los_Angeles',
  '2024-04-05 12:00:00 +02:00'
) AS time_in_la;
Copy
+-------------------------------+
| TIME_IN_LA                    |
|-------------------------------|
| 2024-04-05 03:00:00.000 -0700 |
+-------------------------------+

현재 “현지” 시간을 다양한 타임존으로 표시합니다.

SELECT
  CURRENT_TIMESTAMP() AS now_in_la,
  CONVERT_TIMEZONE('America/New_York', CURRENT_TIMESTAMP()) AS now_in_nyc,
  CONVERT_TIMEZONE('Europe/Paris', CURRENT_TIMESTAMP()) AS now_in_paris,
  CONVERT_TIMEZONE('Asia/Tokyo', CURRENT_TIMESTAMP()) AS now_in_tokyo;
Copy
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+
| NOW_IN_LA                     | NOW_IN_NYC                    | NOW_IN_PARIS                  | NOW_IN_TOKYO                  |
|-------------------------------+-------------------------------+-------------------------------+-------------------------------|
| 2024-06-12 08:52:53.114 -0700 | 2024-06-12 11:52:53.114 -0400 | 2024-06-12 17:52:53.114 +0200 | 2024-06-13 00:52:53.114 +0900 |
+-------------------------------+-------------------------------+-------------------------------+-------------------------------+