카테고리:

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

TO_DATE , DATE

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

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

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

  • VARIANT 식의 경우:

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

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

    • VARIANT 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

인자

필수:

다음 중 하나:

string_expr

날짜를 추출할 문자열입니다. 예를 들어 '2024-01-31' 과 같습니다.

timestamp_expr

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

'integer'

정수가 포함된 문자열로 평가되는 식입니다. 예를 들어 '15000000' 과 같습니다. 문자열의 크기에 따라 초, 밀리초, 마이크로초 또는 나노초로 해석될 수 있습니다. 이 함수에 대한 자세한 내용은 사용법 노트 를 참조하십시오.

variant_expr

VARIANT 형식의 식입니다.

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

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

  • 날짜입니다.

  • 초 또는 밀리초를 나타내는 정수가 포함된 문자열입니다.

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

선택 사항:

format

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

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

반환

반환된 값의 데이터 타입은 DATE입니다. 입력이 NULL인 경우, NULL을 반환합니다.

사용법 노트

  • 출력에서 날짜의 표시 형식은 DATE_OUTPUT_FORMAT 세션 매개 변수(기본값 YYYY-MM-DD)에 의해 결정됩니다.

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

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

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

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

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

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

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

다음 예에서는 TO_DATE 및 DATE 함수를 사용합니다.

기본 예제

SELECT TO_DATE('2024-05-10'), DATE('2024-05-10');
Copy
+-----------------------+--------------------+
| TO_DATE('2024-05-10') | DATE('2024-05-10') |
|-----------------------+--------------------|
| 2024-05-10            | 2024-05-10         |
+-----------------------+--------------------+

타임스탬프에서 날짜를 추출하는 예

TO_DATE 함수에서는 TIMESTAMP 값 및 TIMESTAMP 형식의 문자열을 사용할 수 있지만, 시간 정보(시간, 분 등)는 무시됩니다.

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

CREATE OR REPLACE TABLE date_from_timestamp(ts TIMESTAMP);

INSERT INTO date_from_timestamp(ts)
  VALUES (TO_TIMESTAMP('2024.10.02 04:00:00', 'YYYY.MM.DD HH:MI:SS'));
Copy

테이블에서 TIMESTAMP 값을 쿼리합니다.

SELECT ts FROM date_from_timestamp;
Copy
+-------------------------+
| TS                      |
|-------------------------|
| 2024-10-02 04:00:00.000 |
+-------------------------+

TO_DATE 함수를 사용하여 테이블에서 TIMESTAMP 값을 쿼리합니다.

SELECT TO_DATE(ts) FROM date_from_timestamp;
Copy
+-------------+
| TO_DATE(TS) |
|-------------|
| 2024-10-02  |
+-------------+

다양한 입력 형식을 사용하는 예

다음 예제에서는 입력 형식 사양이 다른 TO_DATE 및 DATE 함수를 사용합니다. 반환되는 출력의 날짜 형식은 DATE_OUTPUT_FORMAT 세션 매개 변수의 설정에 따라 결정됩니다.

SELECT TO_DATE('2024.05.10', 'YYYY.MM.DD'), DATE('2024.05.10', 'YYYY.MM.DD');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('2024.05.10', 'YYYY.MM.DD') | DATE('2024.05.10', 'YYYY.MM.DD') |
|-------------------------------------+----------------------------------|
| 2024-05-10                          | 2024-05-10                       |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('2024-05-10', 'AUTO'), DATE('2024-05-10', 'AUTO');
Copy
+-------------------------------+----------------------------+
| TO_DATE('2024-05-10', 'AUTO') | DATE('2024-05-10', 'AUTO') |
|-------------------------------+----------------------------|
| 2024-05-10                    | 2024-05-10                 |
+-------------------------------+----------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/20/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 2024-05-10                          | 2024-05-20                       |
+-------------------------------------+----------------------------------+

다양한 출력 형식을 사용하는 예

다음 예제는 DATE_OUTPUT_FORMAT 세션 매개 변수가 DD-MON-YYYY 로 설정된 경우의 쿼리 결과를 보여줍니다.

ALTER SESSION SET DATE_OUTPUT_FORMAT = 'DD-MON-YYYY';
Copy
SELECT TO_DATE('2024-05-10', 'YYYY-MM-DD'), DATE('2024-05-10', 'YYYY-MM-DD');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('2024-05-10', 'YYYY-MM-DD') | DATE('2024-05-10', 'YYYY-MM-DD') |
|-------------------------------------+----------------------------------|
| 10-May-2024                         | 10-May-2024                      |
+-------------------------------------+----------------------------------+
SELECT TO_DATE('05/10/2024', 'MM/DD/YYYY'), DATE('05/10/2024', 'MM/DD/YYYY');
Copy
+-------------------------------------+----------------------------------+
| TO_DATE('05/10/2024', 'MM/DD/YYYY') | DATE('05/10/2024', 'MM/DD/YYYY') |
|-------------------------------------+----------------------------------|
| 10-May-2024                         | 10-May-2024                      |
+-------------------------------------+----------------------------------+

정수를 포함하는 문자열을 사용하는 예

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

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

CREATE OR REPLACE TABLE demo1 (
  description VARCHAR,
  value VARCHAR -- 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;
Copy
+--------------+-------------------+-------------------------+----------------+
| 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     |
+--------------+-------------------+-------------------------+----------------+