날짜 및 시간 입력 및 출력 형식

이 항목의 내용:

Snowflake가 사용할 입력 및 출력 형식을 결정하는 방법

날짜, 시간, 타임스탬프에 사용할 입력 및 출력 형식을 결정하기 위해 Snowflake는 다음을 사용합니다.

날짜, 시간 및 타임스탬프에 대한 세션 매개 변수

세션 매개 변수 세트는 날짜, 시간 및 타임스탬프 데이터가 Snowflake로 입력 및 출력되는 방식과 타임존을 지원하는 시간 및 타임스탬프 형식에서 사용되는 표준 시간대를 결정합니다.

매개 변수는 계정, 사용자 및 세션 수준에서 설정할 수 있습니다. 현재 세션의 모든 작업에 적용되는 현재 매개 변수를 확인하려면 SHOW PARAMETERS 명령을 실행합니다.

입력 형식

COPY, INSERT 및 MERGE 연산 등 DML에서 인식할 수 있는 날짜, 시간 및 타임스탬프를 정의하는 매개 변수는 다음과 같습니다.

3개 매개 변수 모두의 기본값은 AUTO입니다. 매개 변수 값이 AUTO로 설정되면, Snowflake는 AUTO 감지에서 지원되는 형식 에서 제공되는 형식 중 하나를 사용하여 모든 입력 식의 날짜, 시간 또는 타임스탬프 문자열을 일치시키려고 시도합니다.

  • 일치하는 형식이 발견되면 Snowflake는 해당 문자열을 허용합니다.

  • 일치하는 형식이 발견되지 않으면 Snowflake는 오류를 반환합니다.

출력 형식

Snowflake에서 제공되는 날짜 및 시간 출력에 대한 형식을 정의하는 매개 변수는 다음과 같습니다.

또한, TIMESTAMP 데이터 타입 별칭을 3개의 TIMESTAMP_* 변형 중 하나로 매핑하는 매개 변수는 다음과 같습니다.

타임존

타임존을 결정하는 매개 변수는 다음과 같습니다.

날짜, 시간 및 타임스탬프를 로드/언로드하기 위한 파일 형식 옵션

입력 및 출력 형식 매개 변수와는 별도로, Snowflake는 Snowflake 테이블에 데이터를 로드하거나 데이터를 언로드할 때 사용할 수 있는 3개의 파일 형식 옵션을 제공합니다.

  • DATE_FORMAT

  • TIME_FORMAT

  • TIMESTAMP_FORMAT

옵션은 COPY 명령에서 직접 지정하거나 COPY 명령에서 참조하는 명명된 스테이지 또는 파일 형식 오브젝트에서 지정할 수 있습니다. 지정된 경우, 이러한 옵션은 해당 입력(데이터 로드 시) 또는 출력(데이터 언로드 시)을 재정의합니다.

데이터 로딩

데이터 로딩에서 사용하는 경우, 이 옵션은 스테이징된 데이터 파일에서 날짜, 시간 및 타임스탬프 문자열의 형식을 지정합니다. 이 옵션은 DATE_INPUT_FORMAT, TIME_INPUT_FORMAT 또는 TIMESTAMP_INPUT_FORMAT 매개 변수 설정을 재정의합니다.

이러한 모든 옵션의 기본값은 AUTO입니다. 즉, COPY INTO <테이블> 명령은 스테이징된 데이터 파일의 모든 날짜와 타임스탬프 문자열을 AUTO 감지에서 지원되는 형식 에서 제공되는 형식 중 하나와 일치시키려고 시도합니다.

  • 일치하는 형식이 발견되면 Snowflake는 해당 문자열을 허용합니다.

  • 일치하는 형식이 발견되지 않으면, Snowflake는 오류를 반환하고 ON_ERROR 복사 옵션에 지정된 동작이 수행됩니다.

경고

Snowflake는 가장 일반적인 날짜, 시간 및 타임스탬프 형식의 자동 감지를 지원합니다(아래 테이블 참조). 그러나 일부 형식의 경우 결과가 모호할 수 있으며, 이로 인해 Snowflake가 데이터를 로드하기 위해 AUTO를 사용할 때 잘못된 형식을 적용할 수 있습니다.

올바른 데이터를 로드할 수 있도록, Snowflake는 데이터 로딩을 위한 파일 형식 옵션을 명시적으로 설정할 것을 적극 권장합니다.

데이터 언로딩

데이터 언로드에서 사용되는 경우, 이 옵션은 지정된 스테이지의 파일로 언로드된 날짜, 시간 및 타임스탬프에 적용됩니다.

이러한 모든 옵션의 기본값은 AUTO입니다. 즉, Snowflake는 다음 매개 변수에 지정된 형식을 적용합니다.

  • DATE_OUTPUT_FORMAT

  • TIME_OUTPUT_FORMAT

  • TIMESTAMP_*_OUTPUT_FORMAT(TIMESTAMP_TYPE_MAPPING 설정에 따라)

입력 및 출력 형식에 사용되는 요소 정보

매개 변수, 파일 형식 옵션, 변환 함수 에 지정하는 입력 및 출력 형식에서 아래 표에 나열된 요소를 사용할 수 있습니다.

다음 섹션 에서도 이러한 요소를 사용하여 Snowflake가 자동으로 인식하는 형식을 설명합니다.

형식 요소

설명

YYYY

4자리 숫자 연도입니다.

YY

TWO_DIGIT_CENTURY_START 세션 매개 변수로 제어되는 2자리 숫자 연도, 예: 1980 로 설정하면 7980 의 값은 각각 20791980 로 구문 분석됩니다.

MM

2자리 숫자 월(01=1월 등)입니다.

MON

전체 또는 간략한 월 이름입니다.

MMMM

전체 월 이름입니다.

DD

월의 2자리 숫자 일(01~31)입니다.

DY

간략한 요일입니다.

HH24

시간에 대한 2자리 숫자(00~23). AM / PM 을 지정하면 안 됩니다.

HH12

시간에 대한 2자리 숫자(01~12). AM / PM 을 지정할 수 있습니다.

AM , PM

오전(am)/오후(pm). HH12 와만 함께 사용하십시오(HH24 와 함께 사용하지 않음).

MI

분에 대한 2자리 숫자(00~59)입니다.

SS

초에 대한 2자리 숫자(00~59)입니다.

FF[0-9]

0(초) ~ 9(나노초) 정밀도의 소수 자리 초입니다. 예: FF, FF0, FF3, FF9. FF 를 지정하는 것은 FF9 (나노초)와 같습니다.

TZH:TZM , TZHTZM , TZH

타임존의 시 및 분이며, UTC 기준 차이입니다. + / - 를 기호의 접두사로 사용할 수 있습니다.

참고

  • 날짜 전용 형식을 사용하는 경우 연결된 시간은 해당 날짜의 자정으로 간주됩니다.

  • 큰따옴표 사이에 있는 형식이나 위 요소 이외의 형식으로 된 항목은 모두 해석되지 않고 구문 분석/형식 지정됩니다.

  • 유효한 범위, 자릿수, 모범 사례에 대한 자세한 내용은 날짜, 시간 및 타임스탬프 형식 사용에 대한 추가 정보 섹션을 참조하십시오.

AUTO 감지에서 지원되는 형식

이러한 명령문이 제공되는 경우 Snowflake는 날짜, 시간 및 타임스탬프 입력 문자열에 대한 특정 형식을 자동으로 감지하여 처리합니다. 다음 섹션에서는 지원되는 형식에 대해 설명합니다.

주의

일부 문자열은 여러 형식과 일치할 수 있습니다. 예를 들어, 〈07-04-2016’은 MM-DD-YYYYDD-MM-YYYY 와 일치하지만, 각 형식은 의미가 다릅니다(7월 4일 vs 4월 7일). 일치하는 형식이 발견되었다는 것은 해당 문자열이 사용자의 의도대로 구문 분석된다는 것을 보장하지 않습니다.

자동 날짜 형식 감지는 편리하지만 날짜가 잘못 해석될 가능성이 증가합니다. Snowflake는 자동 날짜 감지를 사용하는 대신 형식을 명시적으로 지정할 것을 적극 권장합니다.

날짜 형식

아래 형식에 사용된 요소에 대한 설명은 입력 및 출력 형식에 사용되는 요소 정보 섹션을 참조하십시오.

형식

참고

ISO 날짜 형식

YYYY-MM-DD

2013-04-28

기타 날짜 형식

DD-MON-YYYY

17-DEC-1980

MM/DD/YYYY

12/17/1980

일반적인 유럽 형식의 날짜를 로드하거나 작업할 때 잘못된 날짜가 생성될 수 있습니다(예: DD/MM/YYYY). 예를 들어, 05/02/2013은 2013년 2월 5일이 아닌 2013년 5월 2일로 해석될 수 있습니다.

AUTO 날짜 형식을 사용하는 경우 대시와 슬래시는 서로 바꿔 사용할 수 없습니다. 슬래시는 MM/DD/YYYY 형식을 의미하고 대시는 YYYY-MM-DD 형식을 의미합니다. 〈2019/01/02〉 또는 〈01-02-2019’와 같은 문자열은 사용자가 의도한 대로 해석되지 않습니다.

시간 형식

아래 형식에 사용된 요소에 대한 설명은 입력 및 출력 형식에 사용되는 요소 정보 섹션을 참조하십시오.

형식

참고

ISO 시간 형식

HH24:MI:SS.FFTZH:TZM

20:57:01.123456789+07:00

HH24:MI:SS.FF

20:57:01.123456789

HH24:MI:SS

20:57:01

HH24:MI

20:57

인터넷(RFC) 시간 형식

HH12:MI:SS.FF AM

07:57:01.123456789 AM

HH12:MI:SS AM

04:01:07 AM

HH12:MI AM

04:01 AM

AM 형식 요소에서는 AM 또는 PM 값을 사용할 수 있습니다.

참고

AM 형식 요소는 HH12 와만 함께 사용해야 합니다(HH24 와 함께 사용하지 않음).

시간대 오프셋(예: 《0800》)이 시간 또는 타임스탬프 문자열의 바로 뒤에 오는 경우, 시간대 오프셋은 반드시 + 또는 - 로 시작해야 합니다. 부호는 소수 자릿수 초 또는 타임존 오프셋에서 허용되는 최대 자릿수가 포함되지 않은 경우에도 명확하게 해석할 수 있도록 해줍니다. 예를 들어, 소수 자리 초의 마지막 숫자와 시간대의 첫 번째 숫자 사이에 구분 기호가 없는 경우 《04:04:04.321200》 시간에서 《1》은 소수 자리 초의 마지막 숫자(예: 321밀리초) 또는 시간대 오프셋의 첫 번째 숫자(예: UTC의 12시간 전)가 될 수 있습니다.

타임스탬프 형식

아래 형식에 사용된 요소에 대한 설명은 입력 및 출력 형식에 사용되는 요소 정보 섹션을 참조하십시오.

형식

참고

ISO 타임스탬프 형식

YYYY-MM-DD"T"HH24:MI:SS.FFTZH:TZM

2013-04-28T20:57:01.123456789+07:00

T 앞뒤의 큰따옴표는 선택 사항입니다(자세한 내용은 이 테이블 이후에 제공되는 팁 참조).

YYYY-MM-DD HH24:MI:SS.FFTZH:TZM

2013-04-28 20:57:01.123456789+07:00

YYYY-MM-DD HH24:MI:SS.FFTZH

2013-04-28 20:57:01.123456789+07

YYYY-MM-DD HH24:MI:SS.FF TZH:TZM

2013-04-28 20:57:01.123456789 +07:00

YYYY-MM-DD HH24:MI:SS.FF TZHTZM

2013-04-28 20:57:01.123456789 +0700

YYYY-MM-DD HH24:MI:SS TZH:TZM

2013-04-28 20:57:01 +07:00

YYYY-MM-DD HH24:MI:SS TZHTZM

2013-04-28 20:57:01 +0700

YYYY-MM-DD"T"HH24:MI:SS.FF

2013-04-28T20:57:01.123456

T 앞뒤의 큰따옴표는 선택 사항입니다(자세한 내용은 이 테이블 이후에 제공되는 팁 참조).

YYYY-MM-DD HH24:MI:SS.FF

2013-04-28 20:57:01.123456

YYYY-MM-DD"T"HH24:MI:SS

2013-04-28T20:57:01

T 앞뒤의 큰따옴표는 선택 사항입니다(자세한 내용은 이 테이블 이후에 제공되는 팁 참조).

YYYY-MM-DD HH24:MI:SS

2013-04-28 20:57:01

YYYY-MM-DD"T"HH24:MI

2013-04-28T20:57

T 앞뒤의 큰따옴표는 선택 사항입니다(자세한 내용은 이 테이블 이후에 제공되는 팁 참조).

YYYY-MM-DD HH24:MI

2013-04-28 20:57

YYYY-MM-DD"T"HH24

2013-04-28T20

T 앞뒤의 큰따옴표는 선택 사항입니다(자세한 내용은 이 테이블 이후에 제공되는 팁 참조).

YYYY-MM-DD HH24

2013-04-28 20

YYYY-MM-DD"T"HH24:MI:SSTZH:TZM

2013-04-28T20:57:01-07:00

T 앞뒤의 큰따옴표는 선택 사항입니다(자세한 내용은 이 테이블 이후에 제공되는 팁 참조).

YYYY-MM-DD HH24:MI:SSTZH:TZM

2013-04-28 20:57:01-07:00

YYYY-MM-DD HH24:MI:SSTZH

2013-04-28 20:57:01-07

YYYY-MM-DD"T"HH24:MITZH:TZM

2013-04-28T20:57+07:00

T 앞뒤의 큰따옴표는 선택 사항입니다(자세한 내용은 이 테이블 이후에 제공되는 팁 참조).

YYYY-MM-DD HH24:MITZH:TZM

2013-04-28 20:57+07:00

인터넷(RFC) 타임스탬프 형식

DY, DD MON YYYY HH24:MI:SS TZHTZM

Thu, 21 Dec 2000 16:01:07 +0200

DY, DD MON YYYY HH24:MI:SS.FF TZHTZM

Thu, 21 Dec 2000 16:01:07.123456789 +0200

DY, DD MON YYYY HH12:MI:SS AM TZHTZM

Thu, 21 Dec 2000 04:01:07 PM +0200

DY, DD MON YYYY HH12:MI:SS.FF AM TZHTZM

Thu, 21 Dec 2000 04:01:07.123456789 PM +0200

DY, DD MON YYYY HH24:MI:SS

Thu, 21 Dec 2000 16:01:07

DY, DD MON YYYY HH24:MI:SS.FF

Thu, 21 Dec 2000 16:01:07.123456789

DY, DD MON YYYY HH12:MI:SS AM

Thu, 21 Dec 2000 04:01:07 PM

DY, DD MON YYYY HH12:MI:SS.FF AM

Thu, 21 Dec 2000 04:01:07.123456789 PM

기타 타임스탬프 형식

MM/DD/YYYY HH24:MI:SS

2/18/2008 02:36:48

일반적인 유럽 형식의 날짜를 로드하거나 작업할 때 잘못된 날짜가 생성될 수 있습니다(예: DD/MM/YYYY). 예를 들어, 05/02/2013은 2013년 2월 5일이 아닌 2013년 5월 2일로 해석될 수 있습니다.

DY MON DD HH24:MI:SS TZHTZM YYYY

Mon Jul 08 18:09:51 +0000 2013

시간대 오프셋(예: 《0800》)이 시간 또는 타임스탬프 문자열의 바로 뒤에 오는 경우, 시간대 오프셋은 반드시 + 또는 - 로 시작해야 합니다. 부호는 소수 자릿수 초 또는 타임존 오프셋에서 허용되는 최대 자릿수가 포함되지 않은 경우에도 명확하게 해석할 수 있도록 해줍니다. 예를 들어, 소수 자리 초의 마지막 숫자와 시간대의 첫 번째 숫자 사이에 구분 기호가 없는 경우 《04:04:04.321200》 시간에서 《1》은 소수 자리 초의 마지막 숫자(예: 321밀리초) 또는 시간대 오프셋의 첫 번째 숫자(예: UTC의 12시간 전)가 될 수 있습니다.

일부 타임스탬프 형식에서는 T 문자가 날짜와 시간 사이의 구분 기호(예: 'YYYY-MM-DD"T"HH24:MI:SS')로 사용됩니다.

T 앞뒤의 큰따옴표는 선택 사항입니다. 그러나 Snowflake는 명확하게 하기 위해 T (및 다른 리터럴) 앞뒤에 큰따옴표를 사용하는 것을 권장합니다.

큰따옴표는 실제 값이 아닌 형식 지정자로만 사용해야 합니다. 예:

SELECT TO_TIMESTAMP('2019-02-28T23:59:59', 'YYYY-MM-DD"T"HH24:MI:SS');
Copy

또한, T 앞뒤의 따옴표는 반드시 큰따옴표여야 합니다.

날짜, 시간 및 타임스탬프 형식 사용에 대한 추가 정보

다음 섹션에서는 날짜, 시간 및 타임스탬프의 개별 필드에 대한 요구 사항 및 모범 사례를 설명합니다.

필드 값의 유효한 값 범위

각 필드의 권장 값 범위는 아래와 같습니다.

필드

참고

0001 ~ 9999

이 범위를 벗어나는 일부 값은 상황에 따라 허용될 수 있지만 Snowflake에서는 이 범위에 해당하는 값만 사용할 것을 권장합니다. 예를 들어, 0000년은 허용되지만 그레고리력에서는 B.C. 1년 직후에 A.D. 1년이 사용되므로 올바르지 않으며, 0년은 없습니다.

01 ~ 12

01 ~ 31

날짜가 31일 미만인 달의 경우, 실제 최대값은 해당 달의 일수입니다.

시간

00 ~ 23

또는, HH12 형식을 사용하는 경우에는 01 ~ 12 입니다.

00 ~ 59

00 ~ 59

Snowflake에서는 윤초 또는 윤윤초를 지원하지 않습니다. 6061 값은 거부됩니다.

분수

0 ~ 999999999

소수점 이하 자릿수는 정확한 형식 지정자에 따라 다릅니다(예: FF3 은 소수점 이하 3자리까지 지원하고 FF9 는 소수점 이하 9자리까지 지원). 지정한 자릿수보다 적은 숫자를 입력할 수 있으며(예: FF9 를 사용하는 경우에도 1자리 숫자 허용), 후행 0을 사용하여 지정된 필드 길이를 채울 필요가 없습니다.

형식 요소에 올바른 자릿수 사용

대부분의 필드(년, 월, 일, 시간, 분 및 초)에서 형식 지정자의 요소(YYYY, MM, DD 등)는 2자 또는 4자입니다.

다음 규칙은 리터럴 값에 실제로 지정해야 하는 자릿수를 알려줍니다.

  • YYYY: 1, 2, 3 또는 4자리 숫자로 연도를 지정할 수 있습니다. 그러나 Snowflake는 4자리 숫자로 연도를 지정하는 것을 권장합니다. 필요한 경우 앞에 0을 추가합니다. 예를 들어, A.D. 536년은 〈0536’으로 지정할 수 있습니다.

  • YY: 1 또는 2자리 숫자로 연도를 지정합니다. 그러나 Snowflake는 2자리 숫자로 연도를 지정하는 것을 권장합니다. 필요한 경우 앞에 0을 추가합니다.

  • MM: 1 또는 2자리 숫자를 지정합니다. 예를 들어, 1월은 〈01〉 또는 〈1’로 표시할 수 있습니다. Snowflake는 2자리 숫자를 사용하는 것을 권장합니다.

  • DD: 1 또는 2자리 숫자를 지정합니다. Snowflake는 2자리 숫자를 사용하는 것을 권장합니다.

  • HH12HH24: 1 또는 2자리 숫자를 지정합니다. Snowflake는 2자리 숫자를 사용하는 것을 권장합니다.

  • MI: 1 또는 2자리 숫자를 지정합니다. Snowflake는 2자리 숫자를 사용하는 것을 권장합니다.

  • SS: 1 또는 2자리 숫자를 지정합니다. Snowflake는 2자리 숫자를 사용하는 것을 권장합니다.

  • FF9: 1~9자리(포함) 숫자로 지정합니다. Snowflake는 실제 유효 자릿수를 지정하는 것을 권장합니다. 후행 0은 필요하지 않습니다.

  • TZH: 1 또는 2자리 숫자를 지정합니다. Snowflake는 2자리 숫자를 사용하는 것을 권장합니다.

  • TZM: 1 또는 2자리 숫자를 지정합니다. Snowflake는 2자리 숫자를 사용하는 것을 권장합니다.

모든 필드(소수 자리 초 제외)에 대해 Snowflake는 최대 자릿수를 지정할 것을 권장합니다. 필요한 경우 앞에 0을 추가합니다. 예를 들어, 〈0001-02-03 04:05:06 -07:00’은 권장 형식을 따릅니다.

소수 자리 초의 경우 후행 0을 사용하는 것은 선택 사항입니다. 일반적으로 신뢰할 수 있고 의미 있는 자릿수만 지정하는 것이 좋습니다. 예를 들어, 시간 단위가 소수점 이하 3자리(밀리초)까지 정확한 경우에 9자리(예: 〈.123000000〉)로 지정하면 잘못 해석될 수 있습니다.

값 및 형식 지정자의 공백

Snowflake는 일부 상황에서 일치하는 공백을 강제로 적용하지만, 모든 경우에 해당하는 것은 아닙니다. 예를 들어, 다음 문에서는 지정된 값에 날짜와 시간 사이에 공백이 없으므로 오류가 발생하지만, 형식 지정자에는 DDHH 사이에 공백이 있습니다.

SELECT TO_TIMESTAMP('2019-02-2823:59:59 -07:00', 'YYYY-MM-DD HH24:MI:SS TZH:TZM');
Copy

그러나 지정자에 없는 공백이 값에 포함된 경우에도 다음 문에서는 오류가 발생하지 않습니다.

SELECT TO_TIMESTAMP('2019-02-28 23:59:59.000000000 -07:00', 'YYYY-MM-DDHH24:MI:SS.FF TZH:TZM');
Copy

이러한 차이가 발생하는 이유는 전자의 경우 필드가 필드의 전체 길이가 채워지지 않으면 값이 모호하기 때문입니다. 예를 들어, 〈213’은 2일 13시간 또는 21일 3시간으로 해석될 수 있습니다. 그러나 DDHHDD HH 와 명확하게 동일(공백 제외)합니다.

가변 형식 데이터를 처리하기 위해 공백 차이가 허용되지만, Snowflake는 공백을 포함하여 값과 지정자가 정확히 일치하는 것을 권장합니다.

컨텍스트 종속성

모든 컨텍스트에 모든 제약 사항이 강제로 적용되는 것은 아닙니다. 예를 들어, 일부 식에서는 2월 31일이 롤오버될 수 있지만 다른 식에서는 그렇지 않을 수 있습니다.

형식 지정을 위한 모범 사례 요약

이러한 모범 사례를 통해 Snowflake의 과거, 현재 및 향후 버전에서 모호성과 기타 잠재적인 문제가 최소화될 수 있습니다.

  • 형식이 다른 소스의 데이터를 혼합하여 사용하는 것(예: 일반 미국 형식 MM-DD-YYYY 과 일반 유럽 형식 DD-MM-YYYY 를 따르는 혼합 데이터)은 위험합니다.

  • 각 필드의 최대 자릿수를 지정합니다(소수 자리 초 제외). 예를 들어, 4자리 숫자 연도를 사용하고 필요한 경우 선행 0을 지정합니다.

  • 타임스탬프에서 날짜와 시간 사이에 공백이나 T 문자를 지정합니다.

  • 공백(및 날짜와 시간 사이의 선택적 T 구분 기호)은 값과 형식 지정자에서 동일해야 합니다.

  • 롤오버에 기능이 필요한 경우 간격 산술을 사용합니다.

  • AUTO 형식을 사용하는 경우에는 유의해야 합니다. 가능한 경우, 형식을 지정하고 값이 항상 지정된 형식과 일치하는지 확인하십시오.

  • 명령에서 형식을 지정하는 것이 명령 외부에서 형식을 지정(예: DATE_INPUT_FORMAT 등 매개 변수)하는 것보다 안전합니다. (아래를 참조하십시오.)

  • 한 환경에서 다른 환경으로 스크립트를 이동하는 경우에는 DATE_INPUT_FORMAT과 같은 날짜 관련 매개 변수가 새 환경에서 기존 환경과 동일하게 기능하는지 확인합니다(값의 형식도 동일한 것으로 가정).

날짜 및 시간 함수

Snowflake는 DATE/TIME/TIMESTAMP 데이터를 구성, 변환, 추출 또는 수정하기 위한 함수 세트를 제공합니다. 자세한 내용은 날짜 및 시간 함수 를 참조하십시오.

정수로 저장된 날짜, 시간 및 타임스탬프 값의 AUTO 감지

초 또는 밀리초를 나타내는 정수가 문자열에 저장된 경우, Snowflake는 값의 길이에 따라 올바른 측정 단위를 결정하기 위해 시도합니다.

참고

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

예를 들어, Unix Epoch가 시작된 후 1487654321초에 해당하는 타임스탬프를 계산하려면:

select to_timestamp('1487654321');
-------------------------------+
  TO_TIMESTAMP('1487654321')   |
-------------------------------+
 2017-02-20 21:18:41.000000000 |
-------------------------------+
Copy

Epoch 시작 이후의 밀리초를 사용하는 유사한 계산은 다음과 같습니다.

select to_timestamp('1487654321321');
-------------------------------+
 TO_TIMESTAMP('1487654321321') |
-------------------------------+
 2017-02-20 21:18:41.321000000 |
-------------------------------+
Copy

값의 크기에 따라, Snowflake는 다른 측정 단위를 사용합니다.

  • 문자열이 정수로 변환된 후 정수는 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_TIMESTAMP에 전달할 경우 이 함수는 각 문자열의 내용에 따라 각각의 값을 올바르게 해석합니다.

select to_timestamp(column1) from values ('2013-04-05'), ('1487654321');
+-------------------------+
| TO_TIMESTAMP(COLUMN1)   |
|-------------------------|
| 2013-04-05 00:00:00.000 |
| 2017-02-21 05:18:41.000 |
+-------------------------+
Copy

날짜 및 시간 함수 형식 모범 사례

AUTO 감지는 일반적으로 올바른 입력 형식을 결정하지만, 그렇지 않는 경우가 있습니다.

이를 방지하기 위해 Snowflake가 적극 권장하는 모범 사례는 다음과 같습니다(적절한 경우, TO_TIMESTAMP 에서 TO_DATE , DATE 또는 TO_TIME , TIME 대체).

  • 결과가 모호할 수 있는 경우 AUTO 형식을 사용하지 않습니다. 대신 다음과 같이 명시적인 형식 문자열을 지정합니다.

  • 정수값이 포함된 문자열의 경우, 다음 구문을 사용하여 스케일 지정:

    TO_TIMESTAMP(TO_NUMBER(<string_column>), <scale>)
    
    Copy