TO_TIME , TIME

TO_TIME , TIME

입력 표현식을 시간(time)으로 변환해요.

출처: Snowflake SQL Reference - TO_TIME, TIME

본문

구문

TO_TIME( string_expr [, format ] )
TO_TIME( timestamp_expr )
TO_TIME( integer )
TO_TIME( variant_expr )

TIME( string_expr )
TIME( timestamp_expr )
TIME( integer )
TIME( variant_expr )

인자

필수:

string_expr 또는 timestamp_expr 또는 integer 또는 variant_expr 시간으로 변환할 표현식이에요:

  • string_expr: 시간으로 변환할 문자열.
  • timestamp_expr: 시간으로 변환할 타임스탬프. 함수는 입력 값의 시간 부분을 반환해요.
  • integer: 시간으로 변환할 정수를 포함한 문자열. 정수는 Unix epoch 시작 이후의 초, 밀리초, 마이크로초, 나노초 수로 처리돼요. 사용 시 유의사항을 참고하세요.

이 타임스탬프에 대해 함수는 Unix epoch 시작 이후의 초 수를 구해요. 함수는 이 숫자를 하루의 초 수(86400)로 나눈 나머지를 얻기 위해 모듈로 연산을 수행해요:

number_of_seconds % 86400

함수는 이 나머지를 자정 이후의 초 수로 해석해요.

예를 들어 값이 31536002789라고 가정해요.

  • 이 값의 크기에 따라 함수는 밀리초를 시간 단위로 사용하고 이 값이 1971-01-01 00:00:02.789를 나타낸다고 판단해요.

  • 함수는 이 값에 대한 Unix epoch 이후의 초 수(31536002)를 구해요.

  • 함수는 그 숫자를 하루의 초 수로 나눈 나머지(31536002 % 86400)를 구해요.

  • 함수는 나머지(2)를 자정 이후의 초 수로 사용해요. 결과 시간은 00:00:02예요.

  • variant_expr:

    • VARIANT가 TIME 형식(예: HH:MI:SS)의 문자열을 포함하면 문자열 변환이 수행돼요.
    • VARIANT가 INTEGER 형식의 문자열을 포함하면 문자열 변환이 수행되고 값이 자정 이후의 초 수(필요 시 모듈러스 86400)로 처리돼요.
    • VARIANT가 JSON null 값을 포함하면 출력은 NULL이에요.

그 외의 모든 값에 대해서는 변환 오류가 발생해요.

선택:

format string_expr에 대한 시간 형식 지정자 또는 AUTO. AUTO는 Snowflake가 사용할 형식을 자동으로 감지하도록 지정해요. 자세한 내용은 Date and time formats in conversion functions를 참고하세요.

기본값: TIME_INPUT_FORMAT 세션 파라미터의 현재 값(기본 AUTO).

반환 값

반환 값의 데이터 타입은 TIME이에요. 입력이 NULL이면 NULL을 반환해요.

사용 시 유의사항

  • 출력에서 시간의 표시 형식은 TIME_OUTPUT_FORMAT 세션 파라미터(기본 HH24:MI:SS)에 의해 결정돼요.
  • 입력 파라미터의 형식이 정수를 포함한 문자열이면 값의 측정 단위(초, 마이크로초, 밀리초, 나노초)는 다음과 같이 결정돼요:
    • 문자열이 정수로 변환된 후 그 정수는 Unix epoch(1970-01-01 00:00:00.000000000 UTC) 시작 이후의 초, 밀리초, 마이크로초 또는 나노초 수로 처리돼요.
    • 정수가 31536000000(한 해의 밀리초 수)보다 작으면 값은 초 수로 처리돼요.
    • 값이 31536000000 이상이고 31536000000000보다 작으면 값은 밀리초로 처리돼요.
    • 값이 31536000000000 이상이고 31536000000000000보다 작으면 값은 마이크로초로 처리돼요.
    • 값이 31536000000000000 이상이면 값은 나노초로 처리돼요.
  • 한 행보다 많은 행이 평가되면(예: 입력이 한 행보다 많은 테이블의 컬럼 이름인 경우) 값이 초, 밀리초, 마이크로초, 나노초 중 무엇을 나타내는지 각 값이 독립적으로 조사돼요.
  • TO_TIME 함수와 달리 TIME 함수는 선택적 format 파라미터를 지원하지 않아요.

예시

이 예시들은 TO_TIME과 TIME 함수를 사용해요.

SELECT TO_TIME(13:30:00), TIME(13:30:00);
+---------------------+------------------+
| TO_TIME(13:30:00)   | TIME(13:30:00)   |
|---------------------+------------------|
| 13:30:00            | 13:30:00         |
+---------------------+------------------+
SELECT TO_TIME(13:30:00.000), TIME(13:30:00.000);
+-------------------------+----------------------+
| TO_TIME(13:30:00.000)   | TIME(13:30:00.000)   |
|-------------------------+----------------------|
| 13:30:00                | 13:30:00             |
+-------------------------+----------------------+

이 예시는 기본 콜론이 아닌 필드 구분 기호를 처리하기 위해 TO_TIME 함수를 사용하는 방법을 보여줘요. 이 예시는 시와 분 사이, 분과 초 사이의 구분 기호로 마침표 문자를 사용해요:

SELECT TO_TIME(11.15.00, HH24.MI.SS);
+-----------------------------------+
| TO_TIME(11.15.00, HH24.MI.SS)     |
|-----------------------------------|
| 11:15:00                          |
+-----------------------------------+

이 예시는 TO_TIME 함수가 정수를 포함한 문자열을 어떻게 해석하는지 보여줘요:

CREATE OR REPLACE TABLE demo1_time (
  description VARCHAR,
  value VARCHAR -- string rather than bigint
);

INSERT INTO demo1_time (description, value) VALUES
  (Seconds,      31536001),
  (Milliseconds, 31536002400),
  (Microseconds, 31536003600000),
  (Nanoseconds,  31536004900000000);
SELECT description,
       value,
       TO_TIMESTAMP(value),
       TO_TIME(value)
  FROM demo1_time
  ORDER BY value;
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION  | VALUE             | TO_TIMESTAMP(VALUE)     | TO_TIME(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds      | 31536001          | 1971-01-01 00:00:01.000 | 00:00:01       |
| Milliseconds | 31536002400       | 1971-01-01 00:00:02.400 | 00:00:02       |
| Microseconds | 31536003600000    | 1971-01-01 00:00:03.600 | 00:00:03       |
| Nanoseconds  | 31536004900000000 | 1971-01-01 00:00:04.900 | 00:00:04       |
+--------------+-------------------+-------------------------+----------------+

더 알아보기 (Learn more)