카테고리:

변환 함수 , 날짜 및 시간 함수

TO_DATE , DATE

입력 식을 날짜로 변환합니다.

  • 문자열 식의 경우, 문자열을 날짜로 변환한 결과입니다.

  • 타임스탬프 식의 경우, 타임스탬프의 날짜입니다.

  • 베리언트 식의 경우:

    • 베리언트에 문자열이 포함된 경우, 문자열 변환이 수행됩니다.

    • 베리언트에 날짜가 포함된 경우, 날짜 값은 있는 그대로 유지됩니다.

    • 베리언트에 JSON null 값이 포함된 경우, 출력은 NULL입니다.

  • NULL 입력의 경우, 출력은 NULL입니다.

다른 모든 값의 경우, 변환 오류가 생성됩니다.

참고 항목:

TRY_TO_DATE

구문

TO_DATE( <string_expr> [, <format> ] )
TO_DATE( <timestamp_expr> )
TO_DATE( '<integer>' )
TO_DATE( <variant_expr> )

DATE( <string_expr> [, <format> ] )
DATE( <timestamp_expr> )
DATE( '<integer>' )
DATE( <variant_expr> )
Copy

인자

필수:

다음 중 하나:

timestamp_expr

TIMESTAMP 식입니다. TIMESTAMP의 DATE 부분이 추출됩니다.

string_expr

날짜를 추출할 문자열입니다(예: 〈2019-01-31〉).

'integer'

정수를 포함하는 문자열 로 평가되는 식입니다(예: 〈15000000〉). 문자열의 크기에 따라 초, 밀리초, 마이크로초 또는 나노초로 해석될 수 있습니다. 자세한 내용은 아래의 사용법 노트 를 참조하십시오.

참고

인용된 정수를 입력으로 사용하는 것은 더 이상 가능하지 않습니다.

variant_expr

VARIANT 형식의 식입니다. VARIANT는 DATE를 포함하거나, INTEGER가 포함된 문자열을 포함해야 합니다. (TO_DATE는 타임스탬프가 포함된 VARIANT를 전달하면 오류를 반환합니다.)

VARIANT는 다음 중 하나를 포함해야 합니다.

  • 날짜를 추출할 문자열입니다.

  • 날짜입니다.

  • 정수(초 또는 밀리초)를 포함하는 문자열입니다.

TO_DATE는 TIMESTAMP 값을 허용하지만, VARIANT 내부의 TIMESTAMP는 허용하지 않습니다.

선택 사항:

format

string_expr 또는 AUTO 에 대한 날짜 형식 지정자이며, 이는 사용할 형식을 Snowflake가 자동으로 감지하도록 지정합니다. 자세한 내용은 변환 함수의 날짜 및 시간 형식 섹션을 참조하십시오.

기본값은 DATE_INPUT_FORMAT 세션 매개 변수의 현재 값입니다(일반적으로 AUTO).

반환

반환된 값의 데이터 타입은 DATE 입니다.

사용법 노트

  • 입력 매개 변수의 형식이 정수를 포함하는 문자열인 경우:

    • 문자열이 정수로 변환된 후 정수는 Unix epoch(1970-01-01 00:00:00.000000000 UTC) 시작 후의 초, 밀리초, 마이크로초 또는 나노초 단위 수로 처리됩니다.

      • 정수가 31536000000(1년의 밀리초 단위 수) 미만인 경우, 값은 초 단위 수로 처리됩니다.

      • 값이 31536000000 이상이고 31536000000000 미만인 경우, 값은 밀리초로 처리됩니다.

      • 값이 31536000000000 이상이고 31536000000000000 미만인 경우, 값은 마이크로초로 처리됩니다.

      • 값이 31536000000000000보다 큰 경우, 값은 나노초로 처리됩니다.

      조심

      현재, 음수 값은 항상 초로 처리됩니다. 예를 들어, -31536000000000000000은 1970년 이전의 초 단위 수로 처리되지만, 해당 스케일은 나노초로 사용하도록 의도되었음을 의미합니다.

      이 동작은 나중에 변경될 수 있습니다.

      참고

      사용 중단 경고: Snowflake의 향후 버전은 문자열화된 정수 값을 밀리초, 마이크로초 또는 나노초가 아닌 초로 자동 해석할 수 있습니다. Snowflake는 정수가 초로 해석되도록 의도된 경우에만, 해당 정수를 포함하는 문자열로 TO_DATE, TO_TIME, 또는 TO_TIMESTAMP를 호출할 것을 권장합니다.

    • 둘 이상의 행이 평가되는 경우(예: 입력이 둘 이상의 행을 포함하는 테이블의 열 이름인 경우), 각각의 값을 독립적으로 검사해 값이 초, 밀리초, 마이크로초 또는 나노초를 나타내는지 확인합니다.

다음 예는 TO_DATE() 함수 사용 방법을 보여줍니다.

SELECT TO_DATE('2013-05-17'), DATE('2013-05-17');
+-----------------------+--------------------+
| TO_DATE('2013-05-17') | DATE('2013-05-17') |
|-----------------------+--------------------|
| 2013-05-17            | 2013-05-17         |
+-----------------------+--------------------+
Copy
SELECT TO_DATE('2012.07.23', 'YYYY.MM.DD'), DATE('2012.07.23', 'YYYY.MM.DD');
+-------------------------------------+----------------------------------+
| TO_DATE('2012.07.23', 'YYYY.MM.DD') | DATE('2012.07.23', 'YYYY.MM.DD') |
|-------------------------------------+----------------------------------|
| 2012-07-23                          | 2012-07-23                       |
+-------------------------------------+----------------------------------+
Copy
SELECT TO_DATE('1999-01-02', 'AUTO'), DATE('1999-01-02', 'AUTO');
+-------------------------------+----------------------------+
| TO_DATE('1999-01-02', 'AUTO') | DATE('1999-01-02', 'AUTO') |
|-------------------------------+----------------------------|
| 1999-01-02                    | 1999-01-02                 |
+-------------------------------+----------------------------+
Copy
SELECT TO_DATE('02/14/2014', 'MM/DD/YYYY'), DATE('02/14/2014', 'MM/DD/YYYY');
+-------------------------------------+----------------------------------+
| TO_DATE('02/14/2014', 'MM/DD/YYYY') | DATE('02/14/2014', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 2014-02-14                          | 2014-02-14                       |
+-------------------------------------+----------------------------------+
Copy

입력이 정수를 포함하는 문자열인 경우, 해당 정수의 크기는 초, 밀리초 등으로 해석되는지 여부에 영향을 줍니다. 다음 예제에서는 값의 크기를 기준으로 함수가 사용할 단위(초, 밀리초, 마이크로초 또는 나노초)를 선택하는 방법을 보여줍니다.

테이블을 만들고 로딩합니다.

CREATE TABLE demo1 (
    description VARCHAR,
    value VARCHAR -- yes, string rather than bigint
    );

INSERT INTO demo1 (description, value) VALUES
   ('Seconds',      '31536000'),
   ('Milliseconds', '31536000000'),
   ('Microseconds', '31536000000000'),
   ('Nanoseconds',  '31536000000000000')
   ;
Copy

함수에 문자열을 전달합니다.

SELECT
       description,
       value,
       TO_TIMESTAMP(value),
       TO_DATE(value)
    FROM demo1
    ORDER BY value
    ;
+--------------+-------------------+-------------------------+----------------+
| DESCRIPTION  | VALUE             | TO_TIMESTAMP(VALUE)     | TO_DATE(VALUE) |
|--------------+-------------------+-------------------------+----------------|
| Seconds      | 31536000          | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Milliseconds | 31536000000       | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Microseconds | 31536000000000    | 1971-01-01 00:00:00.000 | 1971-01-01     |
| Nanoseconds  | 31536000000000000 | 1971-01-01 00:00:00.000 | 1971-01-01     |
+--------------+-------------------+-------------------------+----------------+
Copy