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:00 | Timestamptz(3) | Timestamptz(6) | 2020-12-12 00:00:00.123000+08:00 | 정밀도 확장 |
2020-12-12 00:00:00.123456+08:00 | Timestamptz(6) | Timestamptz(3) | 2020-12-12 00:00:00.123+08:00 | 정밀도 축소, 올림 없음 |
2020-12-12 00:00:00.996666+08:00 | Timestamptz(6) | Timestamptz(2) | 2020-12-12 00:00:01.00+08:00 | 정밀도 축소, 초 단위로 올림 |
9999-12-31 23:59:59.999999+08:00 | Timestamptz(6) | Timestamptz(5) | 오류 | 올림으로 인한 오버플로로 유효하지 않은 10000년 날짜 생성 |
비엄격 모드
오류 처리를 제외하면 비엄격 모드의 동작은 엄격 모드와 완전히 같습니다.
규칙 설명
낮은 정밀도에서 높은 정밀도로 변환할 때는 새로 추가되는 소수 자리를 0으로 채우며, 이 변환은 항상 유효합니다.
높은 정밀도에서 낮은 정밀도로 변환할 때는 반올림이 수행되며, 올림이 상위 자리로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.
오류 처리
오버플로가 발생하면 반환값은 NULL입니다.
예제
| 입력 TIMESTAMPTZ | 원본 타입 | 대상 타입 | 결과 TIMESTAMPTZ | 설명 |
|---|---|---|---|---|
2020-12-12 00:00:00.123+08:00 | Timestamptz(3) | Timestamptz(6) | 2020-12-12 00:00:00.123000+08:00 | 정밀도 확장 |
2020-12-12 00:00:00.123456+08:00 | Timestamptz(6) | Timestamptz(3) | 2020-12-12 00:00:00.123+08:00 | 정밀도 축소, 올림 없음 |
2020-12-12 00:00:00.99666+08:00 | Timestamptz(6) | Timestamptz(2) | 2020-12-12 00:00:01.00+08:00 | 정밀도 축소, 초 단위로 올림 |
9999-12-31 23:59:59.999999+08:00 | Timestamptz(6) | Timestamptz(5) | NULL | 올림으로 인한 오버플로로 유효하지 않은 10000년 날짜 생성 |
Datetime
엄격 모드
규칙 설명
낮은 정밀도에서 높은 정밀도로 변환할 때는 새로 추가되는 소수 자리를 0으로 채우며, 이 변환은 항상 유효합니다.
높은 정밀도에서 낮은 정밀도로 변환할 때는 반올림이 수행되며, 올림이 상위 자리로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.
오류 처리
오버플로가 발생하면 오류를 보고합니다.
예제
| 입력 DATETIME | 원본 타입 | 대상 타입 | 결과 TIMESTAMPTZ | 설명 |
|---|---|---|---|---|
2020-12-12 00:00:00.123 | Datetime(3) | Timestamptz(6) | 2020-12-12 00:00:00.123000+08:00 | 정밀도 확장 |
2020-12-12 00:00:00.123456 | Datetime(6) | Timestamptz(3) | 2020-12-12 00:00:00.123+08:00 | 정밀도 축소, 올림 없음 |
2020-12-12 00:00:00.99666 | Datetime(6) | Timestamptz(2) | 2020-12-12 00:00:01.00+08:00 | 정밀도 축소, 초 단위로 올림 |
9999-12-31 23:59:59.999999 | Datetime(6) | Timestamptz(5) | 오류 | 올림으로 인한 오버플로로 유효하지 않은 10000년 날짜 생성 |
비엄격 모드
오류 처리를 제외하면 비엄격 모드의 동작은 엄격 모드와 완전히 같습니다.
규칙 설명
낮은 정밀도에서 높은 정밀도로 변환할 때는 새로 추가되는 소수 자리를 0으로 채우며, 이 변환은 항상 유효합니다.
높은 정밀도에서 낮은 정밀도로 변환할 때는 반올림이 수행되며, 올림이 상위 자리로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.
오류 처리
오버플로가 발생하면 반환값은 NULL입니다.
예제
| 입력 DATETIME | 원본 타입 | 대상 타입 | 결과 TIMESTAMPTZ | 설명 |
|---|---|---|---|---|
2020-12-12 00:00:00.123 | Datetime(3) | Timestamptz(6) | 2020-12-12 00:00:00.123000+08:00 | 정밀도 확장 |
2020-12-12 00:00:00.123456 | Datetime(6) | Timestamptz(3) | 2020-12-12 00:00:00.123+08:00 | 정밀도 축소, 올림 없음 |
2020-12-12 00:00:00.99666 | Datetime(6) | Timestamptz(2) | 2020-12-12 00:00:01.00+08:00 | 정밀도 축소, 초 단위로 올림 |
9999-12-31 23:59:59.999999 | Datetime(6) | Timestamptz(5) | NULL | 올림으로 인한 오버플로로 유효하지 않은 10000년 날짜 생성 |