CONVERT_TIMEZONE 함수 - Amazon Redshift

CONVERT_TIMEZONE 함수

CONVERT_TIMEZONE은 시간대끼리 타임스탬프를 변환합니다. 이 함수는 일광 절약 시간에 맞춰 자동으로 조정됩니다.

구문

CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')

인수

source_timezone

(옵션) 현재 타임스탬프의 시간대입니다. 기본값은 UTC입니다. 자세한 내용은 시간대 사용 노트 단원을 참조하십시오.

target_timezone

새로운 타임스탬프의 시간대입니다. 자세한 내용은 시간대 사용 노트 단원을 참조하십시오.

timestamp

타임스탬프 열 또는 묵시적으로 타임스탬프로 변환되는 표현식입니다.

반환 타입

TIMESTAMP

시간대 사용 노트

source_timezone 또는 target_timezone은 시간대 이름('Africa/Kampala', 'Singapore' 등)이나 시간대 약어('UTC', 'PDT' 등)로 지정할 수 있습니다. 시간대 이름을 이름으로 변환하거나 약어를 약어로 변환할 필요가 없습니다. 예를 들어 소스 시간대 이름인 'Singapore'에서 타임스탬프를 선택하고 이를 시간대 약어 'PDT'의 타임스탬프로 변환할 수 있습니다.

참고

시간대 이름 또는 시간대 약어 사용의 결과는 일광 절약 시간 등 지역별 계절 시간으로 인해 다를 수 있습니다.

시간대 이름 사용

현재 시간대 이름 및 시간대 이름의 전체 목록을 보려면 다음 명령을 실행하세요.

select pg_timezone_names();

각 행에는 시간대 이름, 약어, UTC 오프셋 및 시간대가 일광 절약 시간제(t 또는 f)를 준수하는지 여부를 표시하는 쉼표로 구분된 문자열이 포함됩니다. 예를 들어 다음 코드 조각은 두 개의 결과 행을 보여줍니다. 첫 번째 행은 Europe/Paris 시간대(약어 CET)이며 UTC에서 01:00:00 시간이 오프셋되고 f는 일광 절약 시간제를 준수하지 않음을 나타냅니다. 두 번째 행은 Israel 시간대(약어 IST)이며 UTC에서 02:00:00 시간이 오프셋되고 f는 일광 절약 시간제를 준수하지 않음을 나타냅니다.

pg_timezone_names ----------------- (Europe/Paris,CET,01:00:00,f) (Israel,IST,02:00:00,f)

SQL 문을 실행하여 전체 목록을 가져오고 시간대 이름을 찾으세요. 대략 600개의 행이 반환됩니다. 반환된 일부 시간대 이름이 대문자 머리글자이거나 약어(GB, PRC, ROK 등)이기는 하지만 CONVERT_TIMEZONE 함수는 이를 시간대 약어가 아닌 시간대 이름으로 처리합니다.

시간대를 시간대 이름으로 지정하는 경우에는 CONVERT_TIMEZONE 함수가 일광 절약 시간(DST)에 맞춰, 혹은 서머 타임, 스탠다드 타임, 윈터 타임 같이 'timestamp'에서 지정한 날짜 및 시간에 해당하는 시간대의 지역별 계절 프로토콜에 맞춰 자동 조정합니다. 예를 들어 'Europe/London'은 겨울에는 UTC를 나타내고 여름에는 1시간이 추가됩니다.

시간대 약어 사용

현재 시간대 약어 및 시간대 약어의 전체 목록을 보려면 다음 명령을 실행하세요.

select pg_timezone_abbrevs();

결과에는 시간대 약어, UTC 오프셋 및 시간대가 일광 절약 시간제(t 또는 f)를 준수하는지 여부를 표시하는 쉼표로 구분된 문자열이 포함됩니다. 예를 들어 다음 코드 조각은 두 개의 결과 행을 보여줍니다. 첫 번째 행에는 UTC에서 -07:00:00 오프셋이 있는 일광 절약 태평양 표준시(Pacific Daylight Time, 약어 PDT)가 포함되며 t는 일광 절약 시간제를 준수함을 나타냅니다. 두 번째 행에는 UTC에서 -08:00:00 오프셋이 있는 태평양 표준시(Pacific Standard Time, 약어 PST)가 포함되며 f는 일광 절약 시간제를 준수하지 않을 나타냅니다.

pg_timezone_abbrevs -------------------- (PDT,-07:00:00,t) (PST,-08:00:00,f)

SQL 문을 실행하여 전체 목록을 얻고 해당 오프셋 및 일광 절약 표시기를 기반으로 약어를 찾으세요. 대략 200개의 행이 반환됩니다.

시간대 약어는 UTC의 고정 오프셋을 나타냅니다. 시간대를 시간대 약어로 지정하는 경우에는 CONVERT_TIMEZONE 함수가 UTC의 고정 오프셋을 사용하기 때문에 지역별 계정 프로토콜에 따라 조정하지 않습니다.

POSIX 스타일 형식 사용

POSIX-스타일 시간대 명세는 STDoffset 또는 STDoffsetDST 형식을 따릅니다. 여기서 STD는 시간대의 약어이고, offset은 UTC의 숫자 오프셋(서부 시간)이고, DST는 일광 절약 시간대의 약어(옵션)입니다. 일광 절약 시간은 지정한 오프셋보다 1시간 앞서는 것으로 가정합니다.

POSIX-스타일 시간대 형식은 Greenwich에서 서쪽으로 양의 오프셋을 사용하는 반면 ISO-8601 규약은 Greenwich에서 동쪽으로 양의 오프셋을 사용합니다.

다음은 POSIX-스타일 시간대의 예입니다.

  • PST8

  • PST8PDT

  • EST5

  • EST5EDT

참고

Amazon Redshift는 POSIX 스타일 시간대 사양의 유효성을 검사하지 않으므로 시간대를 잘못된 값으로 설정할 수 있습니다. 예를 들어 다음 명령을 시간대를 잘못된 값으로 설정하지만 오류를 반환하지 않습니다.

set timezone to ‘xxx36’;

예제

이 안내서에 나오는 예는 대부분 TICKIT 샘플 데이터 세트를 사용합니다. 자세한 내용은 샘플 데이터베이스를 참조하세요.

다음은 타임스탬프 값을 기본 UTC 시간대에서 PST로 변환하는 예입니다.

select convert_timezone('PST', '2008-08-21 07:23:54'); convert_timezone ------------------------ 2008-08-20 23:23:54

다음은 LISTTIME 열의 타임스탬프 값을 기본 UTC 시간대에서 PST로 변환하는 예입니다. 타임스탬프가 일광 절약 시간(PST)에 해당하더라도 대상 시간대가 약어로 지정되어 있기 때문에 스탠다드 타임으로 변환됩니다.

select listtime, convert_timezone('PST', listtime) from listing where listid = 16; listtime | convert_timezone --------------------+------------------- 2008-08-24 09:36:12 2008-08-24 01:36:12

다음은 LISTTIME 열의 타임스탬프 값을 기본 UTC 시간대에서 US/Pacific 시간대로 변환하는 예입니다. 대상 시간대가 시간대 이름을 사용하고 있고, 타임스탬프가 일광 절약 시간에 해당하기 때문에 함수가 일광 절약 시간을 반환합니다.

select listtime, convert_timezone('US/Pacific', listtime) from listing where listid = 16; listtime | convert_timezone --------------------+--------------------- 2008-08-24 09:36:12 | 2008-08-24 02:36:12

다음은 타임스탬프 문자열을 EST에서 PST로 변환하는 예입니다.

select convert_timezone('EST', 'PST', '20080305 12:25:29'); convert_timezone ------------------- 2008-03-05 09:25:29

다음은 대상 시간대가 시간대 이름(America/New_York)을 사용하고 있고, 타임스탬프가 스탠다드 타임에 해당하기 때문에 타임스탬프를 미국 동부 스탠다드 타임으로 변환하는 예입니다.

select convert_timezone('America/New_York', '2013-02-01 08:00:00'); convert_timezone --------------------- 2013-02-01 03:00:00 (1 row)

다음은 대상 시간대가 시간대 이름(America/New_York)을 사용하고 있고, 타임스탬프가 일광 절약 시간에 해당하기 때문에 타임스탬프를 미국 동부 일광 절약 시간으로 변환하는 예입니다.

select convert_timezone('America/New_York', '2013-06-01 08:00:00'); convert_timezone --------------------- 2013-06-01 04:00:00 (1 row)

다음은 오프셋의 사용을 설명하는 예입니다.

SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2, CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2; newzone_plus_2 | newzone_minus_2_15 | la_plus_2 | gmt_plus_2 ---------------------+---------------------+---------------------+--------------------- 2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00 (1 row)