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

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년 날짜 생성