Time 데이터 타입
Time 데이터 타입
시, 분, 초 구성 요소를 가진 시간을 나타내는 데이터 타입이에요. 어떤 캘린더 날짜와도 독립적이며, 일·월·연 구성 요소가 필요 없는 값에 적합해요. 텍스트 표현 범위는 [-999:59:59, 999:59:59]이고 분해능은 1초예요.
출처: 문서
본문
Time 데이터 타입은 시, 분, 초 구성 요소를 가진 시간을 나타내요. 어떤 캘린더 날짜와도 독립적이며, 일·월·연 구성 요소가 필요 없는 값에 적합해요.
문법:
Time
텍스트 표현 범위: [-999:59:59, 999:59:59]. 분해능: 1초.
구현 세부사항 (Implementation details)
표현과 성능 (Representation and Performance). Time 데이터 타입은 내부적으로 초를 인코딩하는 부호 있는 32비트 정수를 저장해요. Time과 DateTime 타입의 값은 같은 바이트 크기를 가지므로 성능도 비슷해요.
정규화 (Normalization). 문자열을 Time으로 파싱할 때 시간 구성 요소는 정규화되고 검증되지 않아요. 예를 들어 25:70:70은 26:11:10으로 해석돼요.
음수 값 (Negative values). 선두 마이너스 부호가 지원되고 보존돼요. 음수 값은 보통 Time 값에 대한 산술 연산에서 발생해요. Time 타입의 경우 음수 입력은 텍스트(예: '-01:02:03')와 숫자(예: -3723) 모두 보존돼요.
포화 (Saturation). 하루 중 시각 구성 요소는 [-999:59:59, 999:59:59] 범위로 제한돼요. 999를 넘는(또는 -999 미만의) 시간을 가진 값은 텍스트로 999:59:59(또는 -999:59:59)로 표현되고 왕복(round-trip)돼요.
시간대 (Time zones). Time은 시간대를 지원하지 않아요. 즉 Time 값은 지역적 맥락 없이 해석돼요. Time에 타입 매개변수로 시간대를 지정하거나 값 생성 중에 시간대를 지정하면 오류가 던져져요. 마찬가지로 Time 컬럼에 시간대를 적용하거나 바꾸려는 시도는 지원되지 않고 오류가 나요. Time 값은 다른 시간대 아래에서 조용히 재해석되지 않아요.
예시 (Examples)
1. Time 타입 컬럼이 있는 테이블을 만들고 데이터를 넣는 예시에요.
CREATE TABLE tab
(
`event_id` UInt8,
`time` Time
)
ENGINE = TinyLog;
-- Parse Time
-- - from string,
-- - from integer interpreted as number of seconds since 00:00:00.
INSERT INTO tab VALUES (1, '14:30:25'), (2, 52225);
SELECT * FROM tab ORDER BY event_id;
┌─event_id─┬──────time─┐
│ 1 │ 14:30:25 │
│ 2 │ 14:30:25 │
└──────────┴───────────┘
2. Time 값 필터링
SET use_legacy_to_time = 0;
SELECT * FROM tab WHERE time = toTime('14:30:25')
┌─event_id─┬──────time─┐
│ 1 │ 14:30:25 │
│ 2 │ 14:30:25 │
└──────────┴───────────┘
Time 컬럼 값은 WHERE 술어의 문자열 값으로 필터링할 수 있어요. 그것은 자동으로 Time으로 변환돼요.
SELECT * FROM tab WHERE time = '14:30:25'
┌─event_id─┬──────time─┐
│ 1 │ 14:30:25 │
│ 2 │ 14:30:25 │
└──────────┴───────────┘
3. 결과 타입 검사:
SELECT CAST('14:30:25' AS Time) AS column, toTypeName(column) AS type
┌────column─┬─type─┐
│ 14:30:25 │ Time │
└───────────┴──────┘
Date와의 덧셈 (Addition with Date)
Time 값은 Date 또는 Date32 값에 더해져 DateTime 또는 DateTime64를 만들어낼 수 있어요.
SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime('14:30:25') as datetime;
┌────────────datetime─┐
│ 2024-07-15 14:30:25 │
└─────────────────────┘
지원되는 모든 조합과 결과 타입에 대한 자세한 내용은 날짜·시간 덧셈(Date and Time Addition)을 참고해요.