본문으로 건너뛰기
최종 수정: 에

TIMESTAMPTZ 유형으로 변환

문자열 유형과 숫자 유형을 TIMESTAMPTZ 유형으로 변환하는 규칙은 DATETIME 유형으로 변환하는 규칙과 거의 동일합니다. 차이점은 TIMESTAMPTZ로 변환할 때 변환된 DATETIME 값이 최종적으로 UTC 시간으로 변환된다는 점입니다. 따라서 DATETIME 값 자체는 유효해도 UTC 시간으로 변환된 값은 유효하지 않을 수 있습니다. 예를 들면 다음과 같습니다:

set time_zone="+08:00";

select cast("0000-01-01 00:00:00+08:00" as datetimev2);
+-------------------------------------------------+
| cast("0000-01-01 00:00:00+08:00" as datetimev2) |
+-------------------------------------------------+
| 0000-01-01 00:00:00 |
+-------------------------------------------------+
1 row in set (0.00 sec)

select cast("0000-01-01 00:00:00+08:00" as timestamptz);
+--------------------------------------------------+
| cast("0000-01-01 00:00:00+08:00" as timestamptz) |
+--------------------------------------------------+
| NULL |
+--------------------------------------------------+
1 row in set (0.04 sec)

문자열 0000-01-01 00:00:00+08:00은 유효한 DATETIME 값이지만, UTC 시간으로 변환하면 유효 범위를 벗어나 NULL이 반환됩니다.

자세한 변환 규칙은 DATETIME 유형으로 변환 문서를 참고하세요.

날짜 및 시간 유형에서 변환​

Datetime 유형에서 Timestamptz 유형으로의 변환을 지원합니다. 변환 시 DATETIME은 현재 세션의 시간대를 기준으로 UTC 시간으로 변환됩니다. DATETIME 값 자체는 유효해도 UTC 시간으로 변환된 값은 유효하지 않을 수 있습니다.

Timestamptz는 여러 정밀도를 지원하므로, 정밀도가 다른 Timestamptz 유형 간의 변환도 가능합니다.

Timestamptz​

엄격 모드​

규칙 설명​

낮은 정밀도에서 높은 정밀도로 변환할 때는 새로 추가되는 소수 자릿수를 0으로 채우며, 이 변환은 항상 유효합니다.

높은 정밀도에서 낮은 정밀도로 변환할 때는 반올림이 수행되며, 자리올림이 상위 자릿수로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.

오류 처리​

오버플로가 발생하면 오류가 보고됩니다.

예제​
입력 TIMESTAMPTZ원본 유형대상 유형결과 TIMESTAMPTZ설명
2020-12-12 00:00:00.123+08:00Timestamptz(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00정밀도 확장
2020-12-12 00:00:00.123456+08:00Timestamptz(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00정밀도 축소, 자리올림 없음
2020-12-12 00:00:00.996666+08:00Timestamptz(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00정밀도 축소, 초 단위로 자리올림
9999-12-31 23:59:59.999999+08:00Timestamptz(6)Timestamptz(5)오류자리올림으로 인한 오버플로, 유효하지 않은 10000년 날짜 생성

비엄격 모드​

오류 처리를 제외하면 비엄격 모드의 동작은 엄격 모드와 완전히 동일합니다.

규칙 설명​

낮은 정밀도에서 높은 정밀도로 변환할 때는 새로 추가되는 소수 자릿수를 0으로 채우며, 이 변환은 항상 유효합니다.

높은 정밀도에서 낮은 정밀도로 변환할 때는 반올림이 수행되며, 자리올림이 상위 자릿수로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.

오류 처리​

오버플로가 발생하면 반환값은 NULL입니다.

예제​
입력 TIMESTAMPTZ원본 유형대상 유형결과 TIMESTAMPTZ설명
2020-12-12 00:00:00.123+08:00Timestamptz(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00정밀도 확장
2020-12-12 00:00:00.123456+08:00Timestamptz(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00정밀도 축소, 자리올림 없음
2020-12-12 00:00:00.99666+08:00Timestamptz(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00정밀도 축소, 초 단위로 자리올림
9999-12-31 23:59:59.999999+08:00Timestamptz(6)Timestamptz(5)NULL자리올림으로 인한 오버플로, 유효하지 않은 10000년 날짜 생성

Datetime​

엄격 모드​

규칙 설명​

낮은 정밀도에서 높은 정밀도로 변환할 때는 새로 추가되는 소수 자릿수를 0으로 채우며, 이 변환은 항상 유효합니다.

높은 정밀도에서 낮은 정밀도로 변환할 때는 반올림이 수행되며, 자리올림이 상위 자릿수로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.

오류 처리​

오버플로가 발생하면 오류가 보고됩니다.

예제​
입력 DATETIME원본 유형대상 유형결과 TIMESTAMPTZ설명
2020-12-12 00:00:00.123Datetime(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00정밀도 확장
2020-12-12 00:00:00.123456Datetime(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00정밀도 축소, 자리올림 없음
2020-12-12 00:00:00.99666Datetime(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00정밀도 축소, 초 단위로 자리올림
9999-12-31 23:59:59.999999Datetime(6)Timestamptz(5)오류자리올림으로 인한 오버플로, 유효하지 않은 10000년 날짜 생성

비엄격 모드​

오류 처리를 제외하면 비엄격 모드의 동작은 엄격 모드와 완전히 동일합니다.

규칙 설명​

낮은 정밀도에서 높은 정밀도로 변환할 때는 새로 추가되는 소수 자릿수를 0으로 채우며, 이 변환은 항상 유효합니다.

높은 정밀도에서 낮은 정밀도로 변환할 때는 반올림이 수행되며, 자리올림이 상위 자릿수로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.

오류 처리​

오버플로가 발생하면 반환값은 NULL입니다.

예제​
입력 DATETIME원본 유형대상 유형결과 TIMESTAMPTZ설명
2020-12-12 00:00:00.123Datetime(3)Timestamptz(6)2020-12-12 00:00:00.123000+08:00정밀도 확장
2020-12-12 00:00:00.123456Datetime(6)Timestamptz(3)2020-12-12 00:00:00.123+08:00정밀도 축소, 자리올림 없음
2020-12-12 00:00:00.99666Datetime(6)Timestamptz(2)2020-12-12 00:00:01.00+08:00정밀도 축소, 초 단위로 자리올림
9999-12-31 23:59:59.999999Datetime(6)Timestamptz(5)NULL자리올림으로 인한 오버플로, 유효하지 않은 10000년 날짜 생성

TIMESTAMP_NS​

TIMESTAMP_NS를 TIMESTAMPTZ(p)로 변환할 때 Doris는 시간대 정보가 없는 TIMESTAMP_NS 값을 현재 세션의 시간대로 해석한 뒤, 해당 시점으로 변환하고 나노초 소수부를 대상 정밀도 p(0~6)로 반올림합니다.

모든 유효한 TIMESTAMP_NS 값은 TIMESTAMPTZ의 날짜 범위 안에 있으므로 엄격 모드와 비엄격 모드 모두에서 변환이 항상 성공합니다. NULL을 입력하면 NULL이 반환됩니다.

time_zone = '+08:00'으로 가정합니다:

입력 TIMESTAMP_NS대상 유형결과 TIMESTAMPTZ설명
2024-02-29 12:34:56.123456499Timestamptz(6)2024-02-29 12:34:56.123456+08:00마이크로초 단위로 내림
2024-02-29 12:34:56.123456500Timestamptz(6)2024-02-29 12:34:56.123457+08:00마이크로초 단위로 올림
1969-12-31 23:59:59.999999500Timestamptz(6)1970-01-01 00:00:00.000000+08:00다음 초로 자리올림

반대 방향의 변환은 TIMESTAMP_NS로 변환을 참고하세요.