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

DATETIME

설명​

DATETIME(p) 타입은 날짜와 시간을 저장합니다. 여기서 p는 정밀도이며, p의 값 범위는 [0, 6]이고 기본값은 0입니다. 즉, DATETIME은 DATETIME(0)과 같습니다.

값 범위는 [0000-01-01 00:00:00.000..., 9999-12-31 23:59:59.999...]이며, 기본 출력 형식은 'yyyy-MM-dd HH:mm:ss.SSS...'입니다. 소수점 이하 자릿수는 총 p자리입니다. 예를 들어, DATETIME(6)의 값 범위는 [0000-01-01 00:00:00.000000, 9999-12-31 23:59:59.999999]입니다.

Doris는 그레고리력 날짜 형식을 사용하며, 그레고리력에 존재하는 날짜는 Doris에 존재하는 날짜와 일대일로 대응합니다. 여기서 0000은 기원전 1년(BCE 1)을 나타냅니다. 날짜에 관계없이 시간 범위는 항상 ['00:00:00.000...', '23:59:59.999...']이며, 중복되는 시간은 없습니다. 즉, 윤초가 없습니다.

DATETIME 타입은 기본 키, 파티션 컬럼 또는 버킷 컬럼으로 사용할 수 있습니다. DATETIME 타입 필드는 Doris에서 실제로 8바이트를 차지합니다. 런타임에 DATETIME은 연도, 월, 일, 시, 분, 초, 마이크로초를 각각 분리하여 저장하므로, DATETIME 컬럼에 months_add 연산을 수행하는 것이 unix_timestamp보다 효율적입니다.

다른 타입을 DATETIME으로 변환하는 방법과 변환 시 허용되는 입력은 DATETIME으로 변환을 참조하세요.

날짜 및 시간 타입은 수학 연산자를 직접 사용한 산술 연산을 지원하지 않습니다. 수학 연산을 수행할 때는 먼저 날짜 및 시간 타입을 숫자 타입으로 암시적으로 변환한 다음 연산을 수행합니다. 시간 타입에 대해 덧셈, 뺄셈 또는 반올림을 수행해야 한다면 DATE_ADD, DATE_SUB, TIMESTAMPDIFF, DATE_TRUNC 같은 함수를 사용하는 것을 고려하세요.

DATETIME 타입은 시간대 정보를 저장하지 않습니다. 즉, 세션 변수 time_zone의 변경은 DATETIME 타입에 저장된 값에 영향을 주지 않습니다.

나노초 정밀도가 필요하면 TIMESTAMP_NS를 사용하세요. TIMESTAMP_NS도 시간대 정보를 저장하지 않지만, 지원 범위는 1677-09-21부터 2262-04-11까지로 제한됩니다.

예제​

select cast('2020-01-02' as datetime);
+--------------------------------+
| cast('2020-01-02' as datetime) |
+--------------------------------+
| 2020-01-02 00:00:00 |
+--------------------------------+
select cast('2020-01-02' as datetime(6));
+-----------------------------------+
| cast('2020-01-02' as datetime(6)) |
+-----------------------------------+
| 2020-01-02 00:00:00.000000 |
+-----------------------------------+
select cast('0000-12-31 22:21:20.123456' as datetime(4));
+---------------------------------------------------+
| cast('0000-12-31 22:21:20.123456' as datetime(4)) |
+---------------------------------------------------+
| 0000-12-31 22:21:20.1235 |
+---------------------------------------------------+