DATE 타입으로 변환
DATE 타입의 유효 범위: [0000-01-01, 9999-12-31]
문자열에서 변환
엄격 모드
BNF 정의
<datetime> ::= <date> (("T" | " ") <time> <whitespace>* <offset>?)?
| <digit>{14} <fraction>? <whitespace>* <offset>?
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
<date> ::= <year> ("-" | "/") <month1> ("-" | "/") <day1>
| <year> <month2> <day2>
<year> ::= <digit>{2} | <digit>{4} ; 1970 as the boundary
<month1> ::= <digit>{1,2} ; 01–12
<day1> ::= <digit>{1,2} ; 01–28/29/30/31 depending on the month
<month2> ::= <digit>{2} ; 01–12
<day2> ::= <digit>{2} ; 01–28/29/30/31 depending on the month
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
<time> ::= <hour1> (":" <minute1> (":" <second1> <fraction>?)?)?
| <hour2> (<minute2> (<second2> <fraction>?)?)?
<hour1> ::= <digit>{1,2} ; 00–23
<minute1> ::= <digit>{1,2} ; 00–59
<second1> ::= <digit>{1,2} ; 00–59
<hour2> ::= <digit>{2} ; 00–23
<minute2> ::= <digit>{2} ; 00–59
<second2> ::= <digit>{2} ; 00–59
<fraction> ::= "." <digit>*
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
<offset> ::= ( "+" | "-" ) <hour-offset> [ ":"? <minute-offset> ]
| <special-tz>
| <long-tz>
<hour-offset> ::= <digit>{1,2} ; 0–14
<minute-offset> ::= <digit>{2} ; 00/30/45
<special-tz> ::= "CST" | "UTC" | "GMT" | "ZULU" | "Z" ; case-insensitive
<long-tz> ::= ( ^<whitespace> )+ ; e.g. America/New_York
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<area> ::= <alpha>+
<location> ::= (<alpha> | "_")+
<alpha> ::= "A" | … | "Z" | "a" | … | "z"
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\v" | "\f"
규칙 설명
전체 구조
-
날짜 부분은 필수이며, 시간 부분과 시간대 부분은 선택 사항입니다.
-
시간 부분이 있으면 날짜와 시간 사이를 대문자 "T" 또는 공백으로 구분할 수 있습니다.
-
시간대 부분이 있으면 시간과 시간대 사이에 ASCII 공백 문자를 개수 제한 없이 사용할 수 있습니다.
-
ASCII 문자만 허용됩니다. 입력 문자열에 ASCII가 아닌 문자가 포함되면 위의 BNF 정의를 충족하지 않으므로 형식 오류로 처리됩니다.
날짜 부분 <date>
-
다음 두 가지 형식을 허용합니다.
-
구분자가 있는 형식:
YYYY-MM-DD등 -
이어 붙인 형식:
YYYYMMDD등
-
-
<year>: 두 자리 또는 네 자리 숫자-
두 자리 연도(00-99): < 70 → 2000+두 자리 값, ≥ 70 → 1900+두 자리 값.
-
네 자리 연도는 그대로 사용합니다.
-
-
구분자로는 '-'만 지원합니다.
-
<year>,<month>,<day>는 구분자가 있는 형식에서 서로 다른 길이를 지원합니다. 이어 붙인 형식에서는<year>가 2자리 또는 4자리를 지원하고, 나머지는 2자리로 고정됩니다.
시간 부분 <time>
-
다음 두 가지 형식을 허용합니다.
-
구분자가 있는 형식:
HH[:MM[:SS[.fraction]]]등 -
이어 붙인 형식:
HH[MM[SS[.fraction]]]등
-
-
<hour>: 0–23. -
<minute>: 0–59. -
<second>: 0–59. -
<fraction>: 소수점 뒤에 오는 숫자로, 자릿수에 제한이 없으며 초의 소수부를 나타냅니다. 가장 높은 자릿수는 0.1초(백 밀리초)에 해당합니다. -
<hour>,<minute>,<second>는 구분자가 있는 형식에서 1-2자리를 허용하며, 이어 붙인 형식에서는 길이가 2자리로 고정됩니다. -
왼쪽부터 연속된 일부 필드만 사용하고 나머지는 생략할 수 있습니다. 예를 들어
<hour>+<minute>는 유효하지만,<hour>+<fraction>은 유효하지 않습니다.
연속 숫자 형식 <digit>{14}
-
연도, 월, 일, 시, 분, 초를 각각 4자리-2자리-2자리-2자리-2자리-2자리로 해석합니다.
-
그런 다음 소수부와 시간대 부분이 있으면 규칙에 따라 파싱합니다.
시간대 부분 <offset>
-
날짜와 시간대 사이에는 모든 공백 문자를 사용할 수 있습니다.
-
대소문자를 구분하지 않습니다.
-
다음 세 가지 유형을 허용합니다.
-
숫자 오프셋:
(+|-)HH[:MM]또는(+|-)HHMM등-
<hour-offset>: 0–14. 한 자리 값에서는 앞의 0을 생략할 수 있습니다. -
<minute-offset>: 00, 30 또는 45. ":"는 생략할 수 있습니다. -
숫자 오프셋의 최대 범위는
[-14:00, +14:00]입니다.
-
-
특수 UTC 식별자:
Z/UTC/GMT/CST/ZULU. 각 기호가 나타내는 시간대 오프셋은 다음과 같습니다.-
Z: +00:00 -
UTC: +00:00 -
GMT: +00:00 -
CST: +08:00 -
ZULU: +00:00
-
-
긴 형식의 시간대 이름: IANA가 관리하는 시간대 데이터베이스에 포함된 모든 유효한 시간대 이름을 허용합니다. 예를 들어
Europe/Paris,Etc/GMT+2등이 있으며, 대소문자를 구분하지 않습니다.- 사용할 수 있는 시간대 이름은 시간대 문서를 참조하세요.
-
공백
<whitespace>: 스페이스, 탭, 줄바꿈 등을 포함한 모든 공백 문자입니다.
파싱 로직
<datetime>의 모든 입력 필드가 유효한 입력 문자열에 대해 Doris는 <date> 부분만 읽고 그 결과를 변환 후의 대상 값으로 사용합니다. 입력은 각 필드에 따라 결과의 해당 부분에 할당됩니다. 예를 들어 <year>에 일치하는 값은 결과의 연도 부분에, <month>에 일치하는 값은 결과의 월 부분에, <day>에 일치하는 값은 결과의 일 부분에 설정됩니다.
구체적으로, 입력 날짜 결과가 0000년 00월 00일이고 BE CONFIG allow_zero_date가 true이면 값 범위 오류로 처리하지 않으며, 결과는 0000년 01월 01일이 됩니다.
자리 올림
자리 올림은 발생하지 않습니다.
오류 처리
-
형식 오류: 입력이 위의 BNF 분기 중 어느 것과도 일치하지 않으면 즉시 오류를 보고합니다.
-
값 범위 오류:
<date>부분이 유효하지 않으면, 즉 유효한 그레고리력 날짜가 되지 않으면 오류를 보고합니다.
예제
현재 Doris 시간대가 UTC+8(+08:00)이라고 가정합니다. 시간대가 시간 타입 파싱에 미치는 영향은 시간대 문서를 참조하세요.
| 문자열 | DATE 변환 결과 | 설명 |
|---|---|---|
2023-07-16T19:20:30.123+08:00 | 2023-07-16 | 구분자가 있는 날짜 + 'T' + 초 및 밀리초 + 숫자 오프셋 |
2023-07-16T19+08:00 | 2023-07-16 | 분과 초를 생략한 이어 붙인 시간 형식. UTC+8로 변환해도 결과가 바뀌지 않음. |
2023-07-16T1920+08:00 | 2023-07-16 | 초를 생략한 이어 붙인 시간 형식. UTC+8로 변환해도 결과가 바뀌지 않음. |
70-1-1T00:00:00-0000 | 1970-01-01 | 두 자리 연도 + 한 자리/두 자리 월/일 + 구분자 + 이어 붙인 오프셋 |
19991231T235960.5UTC | 1999-12-31 | 이어 붙인 날짜 + 'T' + 이어 붙인 시간 + 소수부 + UTC |
2024-02-29 12:00:00 Europe/Paris | 2024-02-29 | 유효한 윤년 날짜 + 공백 + 전체 시간 + 공백 + 시간대 이름 |
2024-05-01T00:00Asia/Shanghai | 2024-05-01 | 일부 필드가 생략된 시간 + 시간대 이름 |
20231005T081530Europe/London | 2023-10-05 | 이어 붙인 날짜 + 시간대 이름 |
85-12-25T0000gMt | 1985-12-25 | 대소문자가 혼합된 시간대 |
2024-05-01 | 2024-05-01 | 날짜만 지정 |
24-5-1 | 2024-05-01 | 2자리 연도 + 1자리 월 + 1자리 일 |
2024-05-01 0:1:2.333 | 2024-05-01 | 이어 붙인 날짜 + 'T' + 한 자리 시/분/초 + 밀리초 |
2024-05-01 0:1:2. | 2024-05-01 | 이어 붙인 날짜 + 'T' + 한 자리 시/분/초 + 숫자 없이 소수점만 지정 |
20240501 01 | 2024-05-01 | 이어 붙인 날짜 + ' ' + 분과 초 생략 |
20230716 1920Z | 2023-07-16 | 이어 붙인 날짜 + 공백 + 이어 붙인 시/분 + UTC 'Z' |
20240501T0000 | 2024-05-01 | 이어 붙인 날짜 + 'T' + 초를 생략한 이어 붙인 시간 |
2024-12-31 23:59:59.9999999 | 2024-12-31 | 구분자가 있는 날짜 + 공백 + 밀리초가 있는 시간. 시간 부분은 무시됨 |
2025/06/15T00:00:00.99999999999999 | 2025-06-15 | 소수 자릿수에 제한 없음 |
2020-12-12 13:12:12-03:00 | 2020-12-12 | 자리 올림 없음 |
0023-01-01T00:00Z | 0023-01-01 | 유효한 네 자리 연도 |
69-12-31 | 1969-12-31 | 두 자리 연도 69 → 1969-12-31 |
70-01-01 | 1970-01-01 | 두 자리 연도 70 → 1970-01-01 |
230102 | 2023-01-02 | 짧은 연도를 사용한 이어 붙인 DATE 형식 |
19230101 | 1923-01-01 | 긴 연도를 사용한 이어 붙인 DATE 형식 |
120102030405 | 오류(형식 오류) | DATE - TIME 구분자 누락 |
20120102030405.123 +08 | 2012-01-02 | 14자리로 이어 붙인 날짜 + 소수부 + 짧은 시간대 오프셋 |
120102030405.999 | 오류(형식 오류) | DATE - TIME 구분자 누락 |
2020-05-05 12:30:60 | 2020-05-05 | 초가 유효하지 않지만 DATE 해석에 사용되는 부분이 아님 |
2023-07-16T19.123+08:00 | 오류(형식 오류) | 날짜에 연속되지 않은 필드가 포함됨(시 + 밀리초가 분과 초를 건너뜀) |
2024/05/01 | 2024-05-01 | 날짜 구분자로 '/' 사용 |
24012 | 오류(형식 오류) | 날짜의 자릿수가 유효하지 않음 |
2411 123 | 오류(형식 오류) | 날짜와 시간 부분 모두 자릿수가 유효하지 않음 |
2024-05-01 01:030:02 | 오류(형식 오류) | 분의 자릿수가 유효하지 않음 |
10000-01-01 00:00:00 | 오류(형식 오류) | 연도의 자릿수가 유효하지 않음 |
2024-0131T12:00 | 오류(형식 오류) | 월을 이어 붙인 형식에 구분자가 혼합됨 |
2024-05-01@00:00 | 오류(형식 오류) | 잘못된 구분자 |
20120212051 | 오류(형식 오류) | 자릿수 오류 |
2024-05-01T00:00XYZ | 일반적으로 오류(형식 오류) | 알 수 없는 시간대 약어(시간대 문서 참조) |
2024-5-1T24:00 | 오류(값 범위 오류) | 시 값 24가 범위를 벗어남 |
2024-02-30 | 오류(값 범위 오류) | 이월 30일은 존재하지 않음 |
2024-05-01T12:60 | 오류(값 범위 오류) | 분 값 60이 범위를 벗어남 |
2012-06-30T23:59:60 | 오류(값 범위 오류) | 윤초는 허용되지 않음 |
2024-05-01T00:00+14:30 | 오류(값 범위 오류) | 시간대 오프셋이 최대 범위를 초과함 |
2024-05-01T00:00+08:25 | 오류(값 범위 오류) | 시간대 오프셋의 분 값 25가 유효하지 않음 |
비엄격 모드
BNF 정의
엄격 모드에서 지원하는 형식 외에 다음 형식도 지원합니다.
<datetime> ::= <whitespace>* <date> (<delimiter> <time> <whitespace>* <timezone>?)? <whitespace>*
<date> ::= <year> <separator> <month> <separator> <day>
<time> ::= <hour> <separator> <minute> <separator> <second> [<fraction>]
<year> ::= <digit>{4} | <digit>{2}
<month> ::= <digit>{1,2}
<day> ::= <digit>{1,2}
<hour> ::= <digit>{1,2}
<minute> ::= <digit>{1,2}
<second> ::= <digit>{1,2}
<separator> ::= any symbol except digits or letters
<delimiter> ::= " " | "T" | ":"
<fraction> ::= "." <digit>*
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
<offset> ::= ( "+" | "-" ) <hour-offset> [ ":"? <minute-offset> ]
| <special-tz>
| <long-tz>
<hour-offset> ::= <digit>{1,2} ; 0–14
<minute-offset> ::= <digit>{2} ; 00/30/45
<special-tz> ::= "CST" | "UTC" | "GMT" | "ZULU" | "Z" ; case-insensitive
<long-tz> ::= ( ^<whitespace> )+ ; e.g. America/New_York
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\v" | "\f"
<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<alpha> ::= "A" | … | "Z" | "a" | … | "z"
버전 4.0부터 <year> 부분은 2자리 또는 4자리 숫자 입력만 지원합니다. 구분자가 없는 날짜 또는 시간 입력에는 더 엄격한 규칙이 적용됩니다. 14자리 연속 정수 형식만 지원하며, 이 규칙은 엄격 모드에 적용되고 비엄격 모드에서도 그대로 적용됩니다.
각 필드를 파싱할 때 선행 영이 추가되어 허용 길이를 초과하는 입력은 더 이상 허용되지 않습니다. 예를 들어 00012는 <day> ::= <digit>{1,2}에 부합하지 않습니다.
예상하지 못한 공백을 만나면 이미 파싱한 필드로 결과를 채우지 않고, 다른 예상하지 못한 문자를 만났을 때와 마찬가지로 파싱에 실패합니다.
규칙 설명
비엄격 모드에서는 엄격 모드가 지원하는 모든 형식을 파싱할 수 있으며, 위의 BNF 정의에 따른 파싱도 추가로 지원합니다.
전체 구조
-
날짜 부분은 필수이며, 시간 부분과 시간대 부분은 선택 사항입니다.
-
문자열의 시작이나 끝에 모든 ASCII 공백 문자를 사용할 수 있습니다. 날짜와 시간은 공백 또는 대문자 'T'로 구분합니다. 입력 필드 사이의 구분자로는 숫자와 문자를 제외한 모든 기호를 사용할 수 있습니다. 시간대는 선택 사항입니다.
-
ASCII 문자만 허용됩니다. 입력 문자열에 ASCII가 아닌 문자가 포함되면 위의 BNF 정의를 충족하지 않으므로 형식 오류로 처리됩니다.
날짜 부분 <date> 및 시간 부분 <time>
-
<separator>: 숫자와 문자를 제외한 모든 기호. -
<year>: 2자리 또는 4자리 숫자.-
두 자리 연도(00-99): < 70 → 2000+두 자리 값, ≥ 70 → 1900+두 자리 값.
-
네 자리 연도는 그대로 사용합니다.
-
-
<fraction>(선택 사항): 소수점 뒤에 오는 숫자로, 자릿수에 제한이 없습니다. -
그 외 숫자 필드: 1자리 또는 2자리 숫자.
시간대 부분 <timezone>(엄격 모드와 동일)
-
날짜와 시간대 사이에는 모든 공백 문자를 사용할 수 있습니다.
-
대소문자를 구분하지 않습니다.
-
다음 세 가지 유형을 허용합니다.
-
숫자 오프셋:
(+|-)HH[:MM]또는(+|-)HHMM-
<hour-offset>: 0–14. 한 자리 값에서는 앞의 0을 생략할 수 있습니다. -
<minute-offset>: 00, 30 또는 45. ":"는 생략할 수 있습니다. -
숫자 오프셋의 최대 범위는
[-14:00, +14:00]입니다.
-
-
특수 UTC 식별자:
Z/UTC/GMT/CST/ZULU. 각 기호가 나타내는 시간대 오프셋은 다음과 같습니다.-
Z: +00:00 -
UTC: +00:00 -
GMT: +00:00 -
CST: +08:00 -
ZULU: +00:00
-
-
긴 형식의 시간대 이름: IANA가 관리하는 시간대 데이터베이스에 포함된 모든 유효한 시간대 이름을 허용합니다. 예를 들어
Europe/Paris,Etc/GMT+2등이 있으며, 대소문자를 구분하지 않습니다.- 사용할 수 있는 시간대 이름은 시간대 문서를 참조하세요.
-
공백
<whitespace>: 스페이스, 탭, 줄바꿈 등을 포함한 모든 공백 문자입니다.
파싱 로직
위의 BNF 정의를 충족하는 모든 입력 문자열에 대해 Doris는 결과 Date의 해당 부분을 채웁니다. 예를 들어 결과의 연도 부분에는 일치하는 <year> 값을 설정하고, 마이크로초 부분에는 일치하는 <fraction> 값을 설정합니다. 입력에 없는 부분은 결과에서 0으로 설정됩니다.
자리 올림
버전 4.0부터 DATE 타입을 파싱할 때 <date> 이외의 부분은 자리 올림을 발생시키거나 숫자 값에 영향을 주지 않습니다.
자리 올림은 발생하지 않습니다.
오류 처리
-
형식 오류: 입력이 위의 BNF 분기 중 어느 것과도 일치하지 않으면 NULL을 반환합니다.
-
값 범위 오류:
<date>부분이 유효하지 않으면, 즉 유효한 그레고리력 날짜가 되지 않으면 NULL을 반환합니다.
버전 4.0부터 DATE 타입을 파싱할 때 <date> 이외의 부분에 값 범위 오류가 있어도 결과에 영향을 주지 않습니다.
예제
현재 Doris 시간대가 UTC+8(+08:00)이라고 가정합니다. 시간대가 시간 타입 파싱에 미치는 영향은 시간대 문서를 참조하세요.
| 문자열 | DATE 변환 결과 | 설명 |
|---|---|---|
2023-7-4T9-5-3.1Z | 2023-07-04 | 앞뒤 공백이 있음. 날짜 2023-7-4(- 구분자, 한 자리 월/일 지원). 시간과 시간대가 유효함 |
99.12.31 23.59.59+05:30 | 1999-12-31 | .로 날짜와 시간을 구분. 시간대 +05:30(분 값 30은 유효함). 'T' 없음 |
2000/01/01T00/00/00-230 | 2000-01-01 | / 구분자. 콜론이 없고 시 값이 한 자리인 시간대 `-230' |
85 1 1T0 0 0. CST | 1985-01-01 | 모든 필드를 공백으로 구분. 두 자리 연도가 1985에 매핑됨. 소수점 뒤에 숫자가 없음. 짧은 시간대 이름은 대소문자를 구분하지 않음 |
2024-02-29T23:59:59.999999 UTC | 2024-02-29 | 유효한 윤년. 고정밀 소수부에 의한 자리 올림 없음. 특정 시간대 이름 지정 |
70-01-01T00:00:00+14 | 1970-01-01 | 두 자리 연도 1970. 허용되는 최대 오프셋 +14. 분 부분 없음 |
0023-1-1T1:2:3. -00:00 | 0023-01-01 | 네 자리 연도 0023. 한 자리와 두 자리 시간 필드 혼합. 소수점 뒤에 숫자가 없음. 분에 부호가 없는 오프셋 |
2025/06/15T00:00:00.0-0 | 2025-06-15 | / 구분자. 소수점 뒤에 숫자 한 자리. 오프셋 -0(-00:00과 동일) |
2025/06/15T00:00:00.99999999999 | 2025-06-15 | 소수 자릿수에 제한이 없으며 무시됨 |
2024-02-29T23-59-60ZULU | NULL(형식 오류) | 초가 범위를 벗어남 |
2024 12 31T121212.123456 America/New_York | NULL(형식 오류) | 구분자 없이 숫자로만 구성된 시간 |
123.123 | NULL(형식 오류) | 동작 변경: 이전에는 2012-03-12를 나타냈으나 이제 지원하지 않음. |
12121 | NULL(형식 오류) | 동작 변경: 이전에는 2012-12-12를 나타냈으나 이제 지원하지 않음. |
숫자 타입에서 변환
모든 숫자 타입에서 DATE 타입으로 변환할 수 있습니다.
4.0부터 DECIMAL 타입은 리터럴 숫자 값에 따라 변환됩니다. Boolean에서 시간 타입으로의 변환은 지원하지 않습니다. 숫자 입력의 소수부 파싱을 지원합니다.
엄격 모드
규칙 설명
유효한 형식
정수부는 가장 낮은 자릿수부터 높은 자릿수 순으로, 날짜의 맨 오른쪽부터 왼쪽으로 채웁니다. 다음은 유효한 형식과 각 형식에 따라 채워지는 결과입니다(마이크로초 부분 제외).
3-digit number (abc) => 2000 Year 0a Month bc Day
4-digit number (abcd) => 2000 Year ab Month cd Day
5-digit number (abcde) => 200a Year bc Month de Day
6-digit number (abcdef, where ab >= 70) => 19ab Year cd Month ef Day
6-digit number (abcdef, where ab < 70) => 20ab Year cd Month ef Day
8-digit number (abcdefgh) => abcd Year ef Month gh Day
14-digit number (abcdefghijklmn) => abcd Year ef Month gh Day
오류 처리
규칙에 따라 입력을 파싱한 후 유효한 DATE 값을 만들 수 없으면 오류를 보고합니다.
예제
| 숫자 | DATE 변환 결과 | 설명 |
|---|---|---|
123.123 | 2000-01-23 | 3자리 숫자 |
20150102030405 | 2015-01-02 | 14자리 숫자 |
20150102030405.123456 | 2015-01-02 | 14자리 숫자, 유효한 소수부 |
20151231235959.99999999999 | 2015-12-31 | 14자리 숫자, 유효한 소수부 |
1000 | 오류 | 2000-10-00의 일 값이 유효하지 않음 |
-123.123 | 오류 | 음수 시간으로는 유효한 날짜를 만들 수 없음 |
비엄격 모드
오류 처리를 제외하면 비엄격 모드의 동작은 엄격 모드와 완전히 동일합니다.
규칙 설명
유효한 형식
정수부는 가장 낮은 자릿수부터 높은 자릿수 순으로, 날짜의 맨 오른쪽부터 왼쪽으로 채웁니다. 다음은 유효한 형식과 각 형식에 따라 채워지는 결과입니다(마이크로초 부분 제외).
3-digit number (abc) => 2000 Year 0a Month bc Day
4-digit number (abcd) => 2000 Year ab Month cd Day
5-digit number (abcde) => 200a Year bc Month de Day
6-digit number (abcdef, where ab >= 70) => 19ab Year cd Month ef Day
6-digit number (abcdef, where ab < 70) => 20ab Year cd Month ef Day
8-digit number (abcdefgh) => abcd Year ef Month gh Day
14-digit number (abcdefghijklmn) => abcd Year ef Month gh Day
오류 처리
규칙에 따라 입력을 파싱한 후 유효한 DATE 값을 만들 수 없으면 NULL을 반환합니다.
예제
| 숫자 | DATE 변환 결과 | 설명 |
|---|---|---|
123.123 | 2000-01-23 | 3자리 숫자 |
20150102030405 | 2015-01-02 | 14자리 숫자 |
20150102030405.123456 | 2015-01-02 | 14자리 숫자, 유효한 소수부 |
20151231235959.99999999999 | 2015-12-31 | 14자리 숫자, 유효한 소수부 |
1000 | NULL | 2000-10-00의 일 값이 유효하지 않음 |
-123.123 | NULL | 음수 시간으로는 유효한 날짜를 만들 수 없음 |
날짜/시간 계열 타입에서 변환
Datetime 및 Time 타입에서 Date 타입으로 변환할 수 있습니다.
Datetime
규칙 설명
Datetime에서 변환하면 결과는 입력의 날짜 부분입니다. 이 변환은 항상 유효합니다.
예제
| 입력 Datetime | Date 변환 결과 |
|---|---|
2012-02-05 12:35:24.123456 | 2012-02-05 |
Time
규칙 설명
Time에서 변환하면 결과는 현재 날짜에 Time 입력을 더한 값입니다. 이 변환은 예측 가능한 미래(9999년 십이월 이전)까지 유효하므로 Doris는 항상 유효한 변환으로 간주합니다.
예제
현재 날짜가 2025-04-29라고 가정하면 다음과 같습니다.
| 입력 Time | Date 변환 결과 |
|---|---|
500:00:00 | 2025-05-19 |
23:59:59 | 2025-04-29 |
-128:00:00 | 2025-04-23 |
TIMESTAMP_NS
규칙 설명
TIMESTAMP_NS에서 변환할 때 Doris는 날짜 부분을 반환하고, 시간과 초의 소수부는 반올림 없이 버립니다. 유효한 모든 TIMESTAMP_NS 값은 DATE 범위 내에 있으므로 엄격 모드와 비엄격 모드 모두에서 변환이 항상 성공합니다. NULL을 입력하면 NULL을 반환합니다.
예제
| 입력 TIMESTAMP_NS | DATE 변환 결과 |
|---|---|
1677-09-21 00:12:43.145224192 | 1677-09-21 |
1969-12-31 23:59:59.999999999 | 1969-12-31 |
2024-02-29 12:34:56.123456789 | 2024-02-29 |
2262-04-11 23:47:16.854775807 | 2262-04-11 |