Time64 데이터 타입

Time64 데이터 타입

소수부 초(fractional seconds)를 가진 하루 중 시각을 나타내는 데이터 타입이에요. 캘린더 날짜 구성 요소(일, 월, 연)가 없어요. 틱 크기(정밀도)는 10^-precision 초이고, 유효 범위는 0..9예요.

출처: 문서

본문

Time64 데이터 타입은 소수부 초를 가진 하루 중 시각을 나타내요. 캘린더 날짜 구성 요소(일, 월, 연)가 없어요. precision 매개변수가 소수 자릿수, 따라서 틱 크기를 정의해요. 틱 크기(정밀도): 10⁻ᵖʳᵉᶜⁱˢⁱᵒⁿ 초. 유효 범위: 0..9. 흔한 선택은 3(밀리초), 6(마이크로초), 9(나노초)예요.

문법 (Syntax):

Time64(precision)

내부적으로 Time64는 소수부 초를 나타내는 부호 있는 64비트 십진수(Decimal64)를 저장해요. 틱 분해능은 precision 매개변수로 결정돼요. 시간대는 지원되지 않아요. Time64에 시간대를 지정하면 오류가 던져져요. DateTime64와 달리 Time64는 날짜 구성 요소를 저장하지 않아요. Time도 참고해요. precision = 3의 텍스트 표현 범위: [-999:59:59.000, 999:59:59.999]. 일반적으로 최소는 -999:59:59, 최대는 999:59:59이며 최대 precision 자릿수의 소수가 붙어요(precision = 9의 경우 최소는 -999:59:59.999999999).

구현 세부사항 (Implementation details)

표현 (Representation). precision 소수 자릿수로 소수부 초를 세는 부호 있는 Decimal64 값.

정규화 (Normalization). 문자열을 Time64로 파싱할 때 시간 구성 요소는 정규화되고 검증되지 않아요. 예를 들어 25:70:7026:11:10으로 해석돼요.

음수 값 (Negative values). 선두 마이너스 부호가 지원되고 보존돼요. 음수 값은 보통 Time64 값에 대한 산술 연산에서 발생해요. Time64의 경우 음수 입력은 텍스트(예: '-01:02:03.123')와 숫자(예: -3723.123) 모두 보존돼요.

포화 (Saturation). 구성 요소로 변환하거나 텍스트로 직렬화할 때 하루 중 시각 구성 요소는 [-999:59:59.xxx, 999:59:59.xxx] 범위로 제한돼요. 저장된 숫자 값은 이 범위를 초과할 수 있지만, 어떤 구성 요소 추출(시, 분, 초)과 텍스트 표현은 포화된 값을 사용해요.

시간대 (Time zones). Time64는 시간대를 지원하지 않아요. Time64 타입이나 값을 만들 때 시간대를 지정하면 오류가 던져져요. 마찬가지로 Time64 컬럼에 시간대를 적용하거나 바꾸는 것도 지원되지 않고 오류가 나요.

예시 (Examples)

  • Time64 타입 컬럼이 있는 테이블을 만들고 데이터를 넣는 예시에요.
CREATE TABLE tab64
(
    `event_id` UInt8,
    `time` Time64(3)
)
ENGINE = TinyLog;
-- Parse Time64
-- - from string,
-- - from a number of seconds since 00:00:00 (fractional part according to precision).
INSERT INTO tab64 VALUES (1, '14:30:25'), (2, 52225.123), (3, '14:30:25');

SELECT * FROM tab64 ORDER BY event_id;
┌─event_id─┬────────time─┐
│        1 │ 14:30:25.000 │
│        2 │ 14:30:25.123 │
│        3 │ 14:30:25.000 │
└──────────┴──────────────┘
  • Time64 값 필터링
SELECT * FROM tab64 WHERE time = toTime64('14:30:25', 3);
┌─event_id─┬────────time─┐
│        1 │ 14:30:25.000 │
│        3 │ 14:30:25.000 │
└──────────┴──────────────┘
SELECT * FROM tab64 WHERE time = toTime64(52225.123, 3);
┌─event_id─┬────────time─┐
│        2 │ 14:30:25.123 │
└──────────┴──────────────┘

참고: toTime64는 숫자 리터럴을 지정된 정밀도에 따른 소수부를 가진 초로 파싱하므로, 의도한 소수 자릿수를 명시적으로 제공해야 해요.

  • 결과 타입 검사:
SELECT CAST('14:30:25.250' AS Time64(3)) AS column, toTypeName(column) AS type;
┌────────column─┬─type──────┐
│ 14:30:25.250 │ Time64(3) │
└───────────────┴───────────┘

Date와의 덧셈 (Addition with Date)

Time64 값은 Date 또는 Date32 값에 더해져 Time64와 같은 스케일의 DateTime64를 만들어낼 수 있어요.

SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime64('14:30:25.123456', 6) AS dt, toTypeName(dt);
┌─────────────────────────dt─┬─toTypeName(dt)─┐
│ 2024-07-15 14:30:25.123456 │ DateTime64(6)  │
└────────────────────────────┴────────────────┘

지원되는 모든 조합과 결과 타입에 대한 자세한 내용은 날짜·시간 덧셈(Date and Time Addition)을 참고해요.

더 알아보기 (Learn more)