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

날짜 및 시간 입력·출력 형식 (Date and time input and output formats)

Snowflake에서 날짜, 시간, 타임스탬프의 입력·출력 형식을 다루는 문서예요. Snowflake가 사용할 형식을 결정하는 방법, 세션 파라미터, 파일 포맷 옵션, 형식 요소, AUTO 감지 지원 형식, 형식 지정 모범 사례를 확인할 수 있어요.

출처: Snowflake SQL Reference

본문

날짜와 시간 형식은 날짜, 시간, 타임스탬프를 표현하는 방법을 제공해요.

Snowflake가 사용할 입력·출력 형식을 결정하는 방법 (How Snowflake determines the input and output formats to use)

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

  • 날짜, 시간, 타임스탬프용 세션 파라미터
  • 날짜, 시간, 타임스탬프 로딩/언로딩용 파일 포맷 옵션

날짜, 시간, 타임스탬프용 세션 파라미터 (Session parameters for dates, times, and timestamps)

일련의 세션 파라미터가 날짜, 시간, 타임스탬프 데이터가 Snowflake로/에서 전달되는 방식을 결정하며, 시간대를 지원하는 시간·타임스탬프 형식에 사용되는 시간대도 결정해요.

계정, 사용자, 세션 수준에서 파라미터를 설정할 수 있어요. SHOW PARAMETERS 명령을 실행해 현재 세션의 모든 작업에 적용되는 현재 파라미터 설정을 확인해요.

입력 형식 (Input formats)

다음 파라미터는 COPY, INSERT, MERGE 연산을 포함한 DML에 대해 인식되는 날짜, 시간, 타임스탬프 형식을 정의해요.

세 파라미터 모두 기본값은 AUTO예요. 파라미터 값이 AUTO로 설정되면, Snowflake는 모든 입력 표현식의 날짜, 시간, 타임스탬프 문자열을 AUTO 감지 지원 형식에 나열된 형식 중 하나와 일치시키려 시도해요.

  • 일치하는 형식이 있으면 Snowflake는 문자열을 받아들여요.
  • 일치하는 형식이 없으면 Snowflake는 오류를 반환해요.

출력 형식 (Output formats)

다음 파라미터는 Snowflake의 날짜와 시간 출력 형식을 정의해요.

또한 다음 파라미터는 TIMESTAMP 데이터 타입 별칭을 세 가지 TIMESTAMP_* 변형 중 하나에 매핑해요.

시간대 (Time zone)

다음 파라미터는 시간대를 결정해요.

날짜, 시간, 타임스탬프 로딩/언로딩용 파일 포맷 옵션 (File format options for loading/unloading dates, times, and timestamps)

입력·출력 형식 파라미터와 별도로, Snowflake는 Snowflake 테이블로/에서 데이터를 로딩하거나 언로딩할 때 사용할 세 가지 파일 포맷 옵션을 제공해요.

  • DATE_FORMAT
  • TIME_FORMAT
  • TIMESTAMP_FORMAT

이 옵션은 COPY 명령에서 직접 또는 COPY 명령이 참조하는 명명된 스테이지나 파일 포맷 객체에서 지정될 수 있어요. 지정되면 이 옵션은 (데이터 로딩 시) 해당 입력 형식이나 (데이터 언로딩 시) 해당 출력 형식을 재정의해요.

데이터 로딩 (Data loading)

데이터 로딩에 사용될 때 옵션은 스테이지된 데이터 파일의 날짜, 시간, 타임스탬프 문자열 형식을 지정해요. 옵션은 DATE_INPUT_FORMAT, TIME_INPUT_FORMAT, TIMESTAMP_INPUT_FORMAT 파라미터 설정을 재정의해요.

이 옵션 모두 기본값은 AUTO예요. 즉 COPY INTO

명령이 스테이지된 데이터 파일의 모든 날짜·타임스탬프 문자열을 AUTO 감지 지원 형식에 나열된 형식 중 하나와 일치시키려 시도해요.

  • 일치하는 형식이 있으면 Snowflake는 문자열을 받아들여요.
  • 일치하는 형식이 없으면 Snowflake는 오류를 반환한 다음 ON_ERROR 복사 옵션에 지정된 작업을 수행해요.

경고: Snowflake는 대부분의 일반적인 날짜, 시간, 타임스탬프 형식의 자동 감지를 지원해요 (아래 표 참조). 그러나 일부 형식은 모호한 결과를 만들어내 AUTO를 데이터 로딩에 사용할 때 Snowflake가 잘못된 형식을 적용하게 할 수 있어요. 올바른 데이터 로딩을 보장하려면 Snowflake는 데이터 로딩용 파일 포맷 옵션을 명시적으로 설정할 것을 강력히 권장해요.

데이터 언로딩 (Data unloading)

데이터 언로딩에 사용될 때 옵션은 지정된 스테이지의 파일로 언로딩되는 날짜, 시간, 타임스탬프에 적용되는 형식을 지정해요.

이 옵션 모두 기본값은 AUTO예요. 즉 Snowflake는 다음 파라미터에 지정된 형식을 적용해요.

  • DATE_OUTPUT_FORMAT
  • TIME_OUTPUT_FORMAT
  • TIMESTAMP_*_OUTPUT_FORMAT (TIMESTAMP_TYPE_MAPPING 설정에 따름)

입력·출력 형식에 사용되는 요소에 대해 (About the elements used in input and output formats)

파라미터, 파일 포맷 옵션, 변환 함수에서 지정하는 입력·출력 형식에 아래 표에 나열된 요소를 사용할 수 있어요.

다음 섹션도 이 요소들을 사용해 Snowflake가 자동으로 인식하는 형식을 설명해요.

형식 요소 설명
YYYY 네 자리 [1] 연도.
YY TWO_DIGIT_CENTURY_START 세션 파라미터가 제어하는 두 자리 [1] 연도. 예를 들어 1980으로 설정하면 7980 값은 각각 20791980으로 파싱돼요.
Y TWO_DIGIT_CENTURY_START 세션 파라미터가 제어하는 선행 0이 없는 한 자리 또는 두 자리 [2] 연도. 예를 들어 파라미터가 1990으로 설정되면 20051991 값은 각각 591로 직렬화돼요.
MM 두 자리 [1] 월 (01 = 1월, 등).
MO 선행 0이 없는 한 자리 또는 두 자리 [2] 월 (1 = 1월, 등).
MON 축약 월 이름 [3].
MMMM 전체 월 이름 [3].
DD 두 자리 [1] 월의 일 (01 ~ 31).
D 선행 0이 없는 한 자리 또는 두 자리 [2] 월의 일 (1 ~ 31).
DY 축약 요일.
HH24 두 자리 [1] 시 (00 ~ 23). AM / PM 또는 A / P를 지정하면 안 됩니다.
HH12 두 자리 [1] 시 (01 ~ 12). AM / PM 또는 A / P를 지정할 수 있어요.
H24 선행 0이 없는 한 자리 또는 두 자리 [2] 시 (0 ~ 23). AM / PM 또는 A / P를 지정하면 안 됩니다.
H12 선행 0이 없는 한 자리 또는 두 자리 [2] 시 (1 ~ 12). AM / PM 또는 A / P를 지정할 수 있어요.
AM, PM 오전(Ante meridiem, AM) / 오후(post meridiem, PM). HH12H12에서만 사용해요 (HH24H24와는 사용하지 마세요).
P 오전(A) / 오후(P). HH12H12에서만 사용해요 (HH24H24와는 사용하지 마세요).
HH HH24의 동의어.
H H24의 동의어.
MI 두 자리 [1] 분 (00 ~ 59).
ME 선행 0이 없는 한 자리 또는 두 자리 [2] 분 (0 ~ 59).
SS 두 자리 [1] 초 (00 ~ 59).
S 선행 0이 없는 한 자리 또는 두 자리 [2] 초 (0 ~ 59).
FF[0-9] 정밀도 0(초)에서 9(나노초)의 분수 초. 예: FF, FF0, FF3, FF9. FF를 지정하는 것은 FF9(나노초)와 동일해요.
TZH:TZM, TZHTZM, TZH 두 자리 [1] 시간대 시·분, UTC로부터의 오프셋. 부호를 위해 +/-가 접두될 수 있어요.
UUUU BCE 연도에 음수인 ISO 형식의 네 자리 연도.

[1] 자릿수는 값을 텍스트로 직렬화할 때 생성되는 출력을 설명해요. 텍스트를 파싱할 때 Snowflake는 지정된 자릿수까지 받아들여요. 예를 들어 일(day) 수는 한 자리 또는 두 자리일 수 있어요.

[2] 자릿수는 값을 텍스트로 직렬화할 때 생성되는 출력을 설명해요: 값은 선행 0 없이 직렬화돼요. 텍스트를 파싱할 때 Snowflake는 한 자리 또는 두 자리를 받아들여요.

[3] MON 형식 요소의 경우 텍스트로 직렬화할 때 생성되는 출력은 축약 월 이름이에요. MMMM 형식 요소의 경우 텍스트로 직렬화할 때 생성되는 출력은 전체 월 이름이에요. 텍스트를 파싱할 때 Snowflake는 MON과 MMMM 모두에 대해 세 글자 축약형이나 전체 월 이름을 받아들여요. 예를 들어 텍스트를 파싱할 때 "January" 또는 "Jan", "February" 또는 "Feb" 등이 받아들여져요.

참고:

  • 날짜 전용 형식을 사용하면 해당 시간은 그날 자정으로 가정돼요.
  • 큰따옴표 사이의 형식 내용이나 위 요소 이외의 것은 해석되지 않고 파싱/포맷돼요. Snowflake는 리터럴 문자를 항상 큰따옴표로 감싸길 권장해요(예: "T", "EST", "Z"). 그래야 리터럴로 취급되기 때문이에요.
  • 유효 범위, 자릿수, 모범 사례에 대한 자세한 내용은 날짜, 시간, 타임스탬프 형식 사용에 대한 추가 정보를 참조하세요.

AUTO 감지 지원 형식 (Supported formats for AUTO detection)

지시받으면 Snowflake는 날짜, 시간, 타임스탬프 입력 문자열에 대해 특정 형식을 자동으로 감지하고 처리해요. 다음 섹션은 지원 형식을 설명해요.

  • 날짜 형식
  • 시간 형식
  • 타임스탬프 형식

주의: 일부 문자열은 여러 형식과 일치할 수 있어요. 예를 들어 '07-04-2016'MM-DD-YYYYDD-MM-YYYY 모두와 호환되지만 각 형식에서 의미가 달라요 (7월 4일 vs 4월 7일). 일치하는 형식이 있다는 사실이 문자열이 사용자가 의도한 대로 파싱된다는 것을 보장하지는 않아요.

자동 날짜 형식 감지는 편리하지만 오해석의 가능성을 높여요. Snowflake는 자동 날짜 감지에 의존하기보다 형식을 명시적으로 지정할 것을 강력히 권장해요.

날짜 형식 (Date formats)

아래 형식에 사용되는 요소에 대한 설명은 입력·출력 형식에 사용되는 요소에 대해를 참조하세요.

형식 참고
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' 같은 문자열은 기대한 대로 해석되지 않아요.

시간 형식 (Time formats)

아래 형식에 사용되는 요소에 대한 설명은 입력·출력 형식에 사용되는 요소에 대해를 참조하세요.

형식 참고
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.3212001은 분수 초의 마지막 자릿수(즉 321ms)일 수도 있고 시간대 오프셋의 첫 자릿수(즉 UTC보다 12시간 앞)일 수도 있어요.

타임스탬프 형식 (Timestamp formats)

아래 형식에 사용되는 요소에 대한 설명은 입력·출력 형식에 사용되는 요소에 대해를 참조하세요.

형식 참고
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.3212001은 분수 초의 마지막 자릿수(즉 321ms)일 수도 있고 시간대 오프셋의 첫 자릿수(즉 UTC보다 12시간 앞)일 수도 있어요.

팁: 일부 타임스탬프 형식에서 문자 T는 날짜와 시간 사이의 구분자로 사용돼요 (예: 'YYYY-MM-DD"T"HH24:MI:SS'). T 주변의 큰따옴표는 선택 사항이에요. 그러나 Snowflake는 T, EST 같은 시간대 약어, 또는 다른 비요소 텍스트 같은 리터럴 문자를 항상 큰따옴표로 감싸 모호성을 피할 것을 권장해요.

큰따옴표는 실제 값이 아니라 형식 지정자에만 사용하세요. 예를 들어:

-- 권장하지 않음: 리터럴 T와 EST가 따옴표로 감싸지지 않음
SELECT TO_TIMESTAMP('2026-01-02T03:04:05 EST', 'YYYY-MM-DDTHH24:MI:SS EST');

-- 권장: 모든 리터럴 문자를 큰따옴표로 감쌈
SELECT TO_TIMESTAMP('2026-01-02T03:04:05 EST', 'YYYY-MM-DD"T"HH24:MI:SS "EST"');

리터럴 문자 주변의 따옴표는 작은따옴표가 아니라 큰따옴표여야 해요.

날짜, 시간, 타임스탬프 형식 사용에 대한 추가 정보 (Additional information about using date, time, and timestamp formats)

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

  • 필드 값의 유효 범위
  • 형식 요소와 함께 올바른 자릿수 사용
  • 값과 형식 지정자의 공백
  • 컨텍스트 종속성
  • 형식 지정에 대한 모범 사례 요약

필드 값의 유효 범위 (Valid ranges of values for fields)

각 필드의 권장 값 범위는 아래와 같아요.

필드 참고
연도 0001 ~ 9999 일부 컨텍스트에서는 이 범위 밖의 값이 받아들여질 수 있지만, Snowflake는 이 범위의 값만 사용할 것을 권장해요. 예를 들어 연도 0000은 받아들여지지만, 그레고리력에서 기원전 1년 바로 뒤가 서기 1년이므로 올바르지 않아요. 0년은 없어요.
01 ~ 12
01 ~ 31 31일 미만의 달에서는 실제 최대값은 그 달의 일 수예요.
00 ~ 23 또는 HH12 형식을 사용하면 01-12.
00 ~ 59
00 ~ 59 Snowflake는 윤초(leap seconds)나 윤윤초를 지원하지 않아요; 6061 값은 거부돼요.
분수 0 ~ 999999999 소수점 뒤의 자릿수는 정확한 형식 지정자에 따라 달라져요 (예: FF3는 소수점 뒤 최대 3자리, FF9는 최대 9자리를 지원해요). 지정한 것보다 적은 자릿수를 입력할 수 있어요 (예: FF9를 사용해도 1자리 허용); 필드를 지정된 폭으로 채우기 위해 끝에 0을 붙일 필요는 없어요.

형식 요소와 함께 올바른 자릿수 사용 (Using the correct number of digits with format elements)

대부분의 필드(연도, 월, 일, 시, 분, 초)에 대해 형식 지정자의 요소(YYYY, MM, DD 등)는 두 자리 또는 네 자리예요.

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

  • YYYY: 연도의 1, 2, 3, 4자리를 지정할 수 있어요. 그러나 Snowflake는 4자리를 지정할 것을 권장해요. 필요하면 선행 0을 붙여요. 예를 들어 서기 536년은 0536이에요.
  • YY: 연도의 1자리 또는 2자리를 지정해요. 그러나 Snowflake는 2자리를 지정할 것을 권장해요. 필요하면 선행 0을 붙여요.
  • MM: 한 자리 또는 두 자리를 지정해요. 예를 들어 1월은 01 또는 1로 표현될 수 있어요. Snowflake는 두 자리를 권장해요.
  • DD: 한 자리 또는 두 자리를 지정해요. Snowflake는 두 자리를 권장해요.
  • HH12HH24: 한 자리 또는 두 자리를 지정해요. Snowflake는 두 자리를 권장해요.
  • MI: 한 자리 또는 두 자리를 지정해요. Snowflake는 두 자리를 권장해요.
  • SS: 한 자리 또는 두 자리를 지정해요. Snowflake는 두 자리를 권장해요.
  • FF9: 1자리에서 9자리(포함)를 지정해요. Snowflake는 실제 유효 자릿수를 지정할 것을 권장해요. 끝에 0을 붙일 필요는 없어요.
  • TZH: 한 자리 또는 두 자리를 지정해요. Snowflake는 두 자리를 권장해요.
  • TZM: 한 자리 또는 두 자리를 지정해요. Snowflake는 두 자리를 권장해요.

모든 필드(분수 초 제외)에 대해 Snowflake는 최대 자릿수를 지정할 것을 권장해요. 필요하면 선행 0을 사용해요. 예를 들어 0001-02-03 04:05:06 -07:00은 권장 형식을 따르는 것이에요.

분수 초의 경우 끝에 0을 붙이는 것은 선택 사항이에요. 일반적으로 신뢰할 수 있고 의미 있는 자릿수만 지정하는 것이 좋은 관행으로 여겨져요. 예를 들어 시간 측정이 소수점 셋째 자리(밀리초)까지 정확하다면, 아홉 자리로 지정하는 것(예: .123000000)은 오해를 불러일으킬 수 있어요.

값과 형식 지정자의 공백 (Whitespace in values and format specifiers)

Snowflake는 일부 상황(전부는 아님)에서 공백 일치를 강제해요. 예를 들어 다음 문은 지정된 값에서 일과 시 사이에 공백이 없는데 형식 지정자에서 DDHH 사이에 공백이 있으므로 오류를 생성해요.

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

그러나 다음 문은 지정자가 아닌 값에 공백이 있어도 오류를 생성하지 않아요.

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

차이의 이유는 전자의 경우 필드가 최대 폭이 아니면 값이 모호해질 수 있기 때문이에요. 예를 들어 213은 2일 13시간으로 해석될 수도 있고 21일 3시간으로 해석될 수도 있어요. 그러나 DDHH는 (공백 제외) DD HH와 모호하지 않게 동일해요.

팁: 다양한 형식의 데이터를 처리하기 위해 일부 공백 차이는 허용되지만, Snowflake는 공백을 포함해 값과 지정자를 정확히 일치시킬 것을 권장해요.

컨텍스트 종속성 (Context dependency)

모든 제한이 모든 컨텍스트에서 동등하게 적용되지는 않아요. 예를 들어 일부 표현식은 2월 31일을 넘길(roll over) 수 있고, 다른 표현식은 그렇지 않을 수 있어요.

형식 지정에 대한 모범 사례 요약 (Summary of best practices for specifying the format)

이 모범 사례는 Snowflake의 과거, 현재, 예상 미래 버전에서 모호성과 다른 잠재적 문제를 최소화해요.

  • 서로 다른 형식을 사용하는 소스의 데이터를 혼합할 때의 위험을 인지하세요 (예: 일반적인 미국 형식 MM-DD-YYYY와 일반적인 유럽 형식 DD-MM-YYYY를 따르는 데이터를 혼합할 때).
  • 각 필드에 최대 자릿수를 지정하세요 (분수 초 제외). 예를 들어 네 자리 연도를 사용하고 필요하면 선행 0을 지정하세요.
  • 타임스탬프에서 날짜와 시간 사이에 공백 또는 문자 T를 지정하세요. T를 사용한다면 Snowflake는 형식 문자열에서 "T"로 작성할 것을 권장해요.
  • 형식 문자열 내에서 리터럴 문자를 큰따옴표로 감싸세요. 예를 들어 YYYY-MM-DD"T"HH24:MI:SS "EST"YYYY-MM-DDTHH24:MI:SS EST 대신 사용해요. 이렇게 하면 리터럴 텍스트가 형식 요소로 오해석되는 것을 방지할 수 있어요.
  • 공백(및 날짜와 시간 사이의 "T" 구분자)이 값과 형식 지정자에서 동일한지 확인하세요.
  • rollover와 동등한 것이 필요하면 인터벌 산술(interval arithmetic)을 사용하세요.
  • AUTO 형식을 사용할 때 주의하세요. 가능하면 형식을 지정하고, 값이 항상 지정된 형식과 일치하도록 하세요.
  • 명령에서 형식을 지정하세요. 명령 밖, 예를 들어 DATE_INPUT_FORMAT 같은 파라미터에서 형식을 지정하는 것보다 더 안전하기 때문이에요. (아래 참조)
  • 스크립트를 한 환경에서 다른 환경으로 옮길 때 DATE_INPUT_FORMAT 같은 날짜 관련 파라미터가 새 환경에서 이전 환경과 동일한지 확인하세요 (값도 같은 형식이라고 가정).

날짜 & 시간 함수 (Date & time functions)

Snowflake는 DATE, TIME, TIMESTAMP 데이터를 구성, 변환, 추출, 수정하기 위한 일련의 함수를 제공해요. 자세한 내용은 날짜 & 시간 함수(Date & Time Functions)를 참조하세요.

정수로 저장된 날짜, 시간, 타임스탬프 값의 AUTO 감지 (AUTO detection of integer-stored date, time, and timestamp values)

문자열에 저장된 초 또는 밀리초의 정수의 경우, Snowflake는 값의 길이를 기반으로 올바른 측정 단위를 결정하려 시도해요.

참고: 따옴표로 묶인 정수를 입력으로 사용하는 것은 사용 중단(deprecated)됐어요.

이 예제는 Unix epoch 시작 이후 1487654321초에 해당하는 타임스탬프를 계산해요.

SELECT TO_TIMESTAMP('1487654321');
+-------------------------------+
| TO_TIMESTAMP('1487654321')    |
|-------------------------------|
| 2017-02-21 05:18:41.000000000 |
+-------------------------------+

epoch 시작 이후 밀리초를 사용한 비슷한 계산이에요.

SELECT TO_TIMESTAMP('1487654321321');
+-------------------------------+
| TO_TIMESTAMP('1487654321321') |
|-------------------------------|
| 2017-02-21 05:18:41.321000000 |
+-------------------------------+

값의 크기에 따라 Snowflake는 다른 측정 단위를 사용해요.

  • 문자열이 정수로 변환된 후, 정수는 Unix epoch(1970-01-01 00:00:00.000000000 UTC) 시작 이후의 초, 밀리초, 마이크로초, 나노초 수로 취급돼요.

    • 정수가 31536000000(1년의 밀리초 수)보다 작으면 값은 초 수로 취급돼요.
    • 값이 31536000000보다 크거나 같고 31536000000000보다 작으면 값은 밀리초로 취급돼요.
    • 값이 31536000000000보다 크거나 같고 31536000000000000보다 작으면 값은 마이크로초로 취급돼요.
    • 값이 31536000000000000보다 크거나 같으면 값은 나노초로 취급돼요.
  • 둘 이상의 행이 평가되면(예: 입력이 둘 이상의 행을 포함하는 테이블의 열 이름인 경우), 값이 초, 밀리초, 마이크로초, 나노초 중 무엇을 나타내는지 결정하기 위해 각 값이 독립적으로 검사돼요.

포맷된 문자열과 문자열 안의 정수가 함수에 함께 전달되는 경우, 각 값은 문자열의 내용에 따라 캐스팅돼요. 예를 들어 날짜 형식 문자열과 정수를 포함하는 문자열을 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 |
+-------------------------+

날짜 & 시간 함수 형식 모범 사례 (Date & time function format best practices)

AUTO 감지는 보통 올바른 입력 형식을 결정해요. 그러나 올바른 결정을 내리지 못할 수 있는 상황이 있어요.

이를 피하기 위해 Snowflake는 다음 모범 사례를 강력히 권장해요 (필요에 따라 TO_DATE, DATE 또는 TO_TIME, TIMETO_TIMESTAMP로 대체):

  • 모호한 결과가 나올 가능성이 있다면 AUTO 형식 사용을 피하세요. 대신 명시적 형식 문자열을 지정하세요. 그 방법은:

    • TIMESTAMP_INPUT_FORMAT 및 날짜, 타임스탬프, 시간용 다른 세션 파라미터 설정. (이 문서의 날짜, 시간, 타임스탬프용 세션 파라미터 참조)
    • 다음 구문으로 형식 지정:
TO_TIMESTAMP(<value>, '<format>')
  • 정수 값을 포함하는 문자열의 경우 다음 구문으로 scale을 지정하세요.
TO_TIMESTAMP(TO_NUMBER(<string_column>), <scale>)

더 알아보기 (Learn more)