본문으로 건너뛰기
최종 수정: 에

TIME 타입으로 변환

TIME 타입의 유효 범위는 [-838:59:59.999999, 838:59:59.999999]입니다.

TIME 타입에는 소수 자릿수를 나타내는 타입 매개변수 p가 있습니다. 전체 표기는 TIME(p) 타입입니다. 예를 들어 TIME(6)은 마이크로초 정밀도를 지원하는 TIME 타입을 나타냅니다.

String에서 변환​

동작 변경

4.0 버전부터 TIME 타입 파싱은 이 문서에서 설명하는 형식만 지원하며, Datetime 타입에서 허용하는 규칙을 통한 추가 변환을 더 이상 시도하지 않습니다.

엄격 모드​

BNF 정의​

<time> ::= ("+" | "-")? (<colon-format> | <numeric-format>)

<colon-format> ::= <hour> ":" <minute> (":" <second> (<microsecond>)?)?
<hour> ::= <digit>+
<minute> ::= <digit>{1,2}
<second> ::= <digit>{1,2}

<numeric-format> ::= <digit>+ (<microsecond>)?

<microsecond> ::= "." <digit>*

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"

규칙 설명​

전체 구조​

<colon-format>과 <numeric-format>의 두 가지 형식을 지원합니다.

  • 맨 앞에는 결과의 부호를 나타내는 더하기 또는 빼기 기호가 선택적으로 올 수 있습니다.

  • <colon-format>은 다음 순서로 구성됩니다.

    • <hour>: 0-23. 한 자리 이상이어야 하며, INT 범위를 초과해서는 안 됩니다.

    • <minute>: 0-59. 한 자리 또는 두 자리이며, 구분자 :로 <hour>와 구분해야 합니다.

    • <second>: 선택 사항. 0-59. 한 자리 또는 두 자리이며, 구분자 :로 <minute>와 구분해야 합니다. 기본값은 0입니다.

    • <microsecond>: 선택 사항. .으로 시작하고 그 뒤에는 자릿수 제한 없이 숫자가 올 수 있습니다. 기본값은 0입니다.

  • <numeric-format>은 다음 순서로 구성됩니다.

    • 연속된 숫자로 이루어진 문자열로, 시, 분, 초 필드가 이어진 값으로 처리합니다. 오른쪽을 기준으로 정렬하므로 입력의 일의 자리가 결과의 초의 일의 자리에 대응하고, 나머지는 왼쪽으로 차례로 채워집니다. 예를 들어 입력의 천의 자리는 결과의 분의 십의 자리에 대응합니다.

    • <microsecond> 필드와 같은 선택적 소수부입니다. 소수 자릿수가 p를 초과하면 소수점 이하 p자리로 반올림합니다.

오류 처리​
  • 형식 오류: 위 BNF의 어느 분기에도 부합하지 않으면 즉시 오류를 보고합니다.

  • 값 범위 오류: 결과가 유효한 시간이 아니거나 TIME 타입의 값 범위를 초과하면 오류를 보고합니다.

예제​

문자열TIME(6)으로 변환한 결과설명
100:00:01.000000일의 자리를 초의 일의 자리에 맞춤
12300:01:23.000000일의 자리를 초의 일의 자리에 맞추고 왼쪽으로 채움
2005959.12200:59:59.120000소수가 포함된 입력
0.1200:00:00.120000숫자 형식의 0 시간 입력 + 소수부
00:00:00.1200:00:00.120000구분자가 있는 형식의 0 시간 입력 + 소수부
123.00:01:23.000000소수부의 자릿수로 0자리 허용
123.000:01:23.000000소수부가 1자리이며 값은 0
123.12300:01:23.123000유효한 소수부
-1-00:00:01.000000음수 입력
12-34:56.1오류 (형식 오류)'-'는 유효한 구분자가 아님
12 : 34 : 56오류 (형식 오류)유효하지 않은 공백
76오류 (값 범위 오류)76초는 유효하지 않음
200595912오류 (값 범위 오류)20059시간은 유효하지 않음
8385959.9999999오류 (값 범위 오류)자리 올림으로 상한 초과

비엄격 모드​

동작 변경

4.0부터 DECIMAL 타입은 리터럴 값 표현에 따라 변환됩니다. <microsecond> 필드를 마이크로초로 파싱할 수 있습니다. 범위를 벗어나는 모든 형식은 오류로 간주하고 그에 따라 처리합니다.

비엄격 모드는 앞뒤 공백을 지원하며, 오류 처리 방식이 엄격 모드와 다릅니다.

BNF 정의​

<time> ::= <whitespace>* ("+" | "-")? (<colon-format> | <numeric-format>) <whitespace>*

<colon-format> ::= <hour> ":" <minute> (":" <second> (<microsecond>)?)?
<hour> ::= <digit>+
<minute> ::= <digit>{1,2}
<second> ::= <digit>{1,2}

<numeric-format> ::= <digit>+ (<microsecond>)?

<microsecond> ::= "." <digit>*

<digit> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<whitespace> ::= " " | "\t" | "\n" | "\r" | "\v" | "\f"

규칙 설명​

전체 구조​

<colon-format>과 <numeric-format>의 두 가지 형식을 지원합니다.

  • 시간의 부호를 나타내는 기호가 선택적으로 올 수 있습니다.

  • <colon-format>은 다음과 같이 구성됩니다.

    • <hour>: 0-23. 한 자리 이상이어야 하며, INT 범위를 초과해서는 안 됩니다.

    • <minute>: 0-59. 한 자리 또는 두 자리이며, :로 구분합니다.

    • <second>: 선택 사항. 0-59. 한 자리 또는 두 자리이며, :로 구분합니다.

    • <microsecond>: 선택 사항. .으로 시작하고 그 뒤에는 자릿수 제한 없이 숫자가 올 수 있습니다.

  • <numeric-format>은 다음과 같이 구성됩니다.

    • 연속된 숫자로 이루어진 문자열로, 시, 분, 초 필드가 이어진 값으로 처리합니다. 맨 오른쪽 숫자를 초 필드에 맞추고 나머지는 오른쪽에서 왼쪽으로 채웁니다.

    • <microsecond>와 같은 선택적 소수부입니다. 자릿수가 초과하면 지정된 소수점 이하 p자리로 반올림합니다.

오류 처리​
  • 형식 오류: BNF의 어느 분기에도 일치하지 않으면 NULL을 반환합니다.

  • 값 범위 오류: 결과가 유효한 시간이 아니거나 TIME 타입의 범위를 초과하면 NULL을 반환합니다.

예제​

입력 문자열TIME(6)으로 변환한 결과설명
100:00:01.000000맨 오른쪽 숫자를 초에 맞춤
12300:01:23.000000맨 오른쪽 숫자를 초에 맞추고 오른쪽에서 왼쪽으로 채움
2005959.12200:59:59.120000소수가 포함된 입력
0.1200:00:00.120000숫자 형식의 0 시간 입력 + 소수부
00:00:00.1200:00:00.120000콜론 형식의 0 시간 입력 + 소수부
123.00:01:23.000000소수부의 자릿수로 0자리 허용
123.000:01:23.000000소수부가 1자리이며 값은 0
123.12300:01:23.123000유효한 소수부
-1-00:00:01.000000음수 입력
-800:05:05-800:05:05.000000시간이 3자리인 음수
-991213.56-99:12:13.560000음수 입력
80302.999999908:03:03.000000소수 자릿수가 6을 초과하여 자리 올림 발생
5656.300000000900:56:56.300000소수부의 하위 자릿수 버림
5656.300000700100:56:56.300001마이크로초 단위로 반올림
1 NULL유효하지 않은 형식으로, BNF가 공백과 일치하지 않음
.123NULL소수점 앞에 필드가 없음
:12:34NULL시간 필드 누락
12-34:56.1NULL'-'는 유효한 구분자가 아님
12 : 34 : 56NULL유효하지 않은 공백
76NULL76초는 유효하지 않음
200595912NULL20059시간은 유효하지 않음
8385959.9999999NULL자리 올림으로 상한 초과

숫자 타입에서 변환​

모든 숫자 타입을 TIME 타입으로 변환할 수 있습니다.

동작 변경

4.0 버전부터 Doris는 소수부 파싱을 지원하며, 모든 숫자 타입을 Time 타입으로 변환할 수 있습니다.

엄격 모드​

규칙 설명​

유효한 형식​

정수부의 숫자는 낮은 자리부터 높은 자리 순으로, 날짜의 맨 오른쪽에서 왼쪽으로 채웁니다. 유효한 형식과 각 형식에 따른 결과는 다음과 같습니다(마이크로초 부분 제외).

1-digit number(a)         00:00:0a
2-digit number(ab) 00:00:ab
3-digit number(abc) 00:0a:bc
4-digit number(abcd) 00:ab:cd
5-digit number(abcde) 0a:bc:de
6-digit number(abcdef) ab:cd:ef
7-digit number(abcdefg) abc:de:fg

소수부의 숫자는 높은 자리부터 낮은 자리 순으로, 소수점 다음 맨 왼쪽(백 밀리초 자리)에서 오른쪽으로 채웁니다. 소수가 정확하게 표현되지 않는 타입(float, double)이면 Cast 전의 실제 값을 그대로 사용합니다. 소수 자릿수가 p를 초과하면 소수점 이하 p자리로 반올림합니다.

입력이 음수이면 파싱한 값의 부호를 반대로 바꾼 결과를 반환합니다.

오류 처리​

규칙에 따라 입력을 유효한 TIME 값으로 파싱할 수 없으면 오류를 보고합니다.

예제​

숫자TIME(3)으로 변환한 결과설명
12345612:34:56.000
-123456-12:34:56.000
12300:01:23.000
6.9999900:00:07.000
-0.99-00:00:00.990
8501212850:12:12.000
20001212오류길이가 범위를 벗어남
9000000오류시간 값 900이 상한을 초과함
67오류초 값 67이 유효하지 않음

비엄격 모드​

오류 처리를 제외하면 비엄격 모드의 동작은 엄격 모드와 완전히 동일합니다.

규칙 설명​

유효한 형식​

정수부의 숫자는 낮은 자리부터 높은 자리 순으로, 시간의 맨 오른쪽에서 왼쪽으로 채웁니다. 유효한 형식과 각 형식에 따른 결과는 다음과 같습니다(마이크로초 부분 제외).

1-digit number(a)         00:00:0a
2-digit number(ab) 00:00:ab
3-digit number(abc) 00:0a:bc
4-digit number(abcd) 00:ab:cd
5-digit number(abcde) 0a:bc:de
6-digit number(abcdef) ab:cd:ef
7-digit number(abcdefg) abc:de:fg

소수부의 숫자는 높은 자리부터 낮은 자리 순으로, 날짜에서 소수점 다음 맨 왼쪽(백 밀리초 자리)부터 채웁니다. 소수가 부정확하게 표현되는 타입(float, double)이면 Cast 전에 해당 값이 실제로 나타내는 값을 사용합니다.

입력이 음수이면 파싱한 값의 부호를 반대로 바꾼 결과를 반환합니다.

오류 처리​

규칙에 따라 입력을 유효한 TIME 값으로 파싱할 수 없으면 NULL을 반환합니다.

예제​

숫자TIME(3)으로 변환한 결과설명
12345612:34:56.000
-123456-12:34:56.000
12300:01:23.000
6.9999900:00:07.000
-0.99-00:00:00.990
8501212850:12:12.000
20001212NULL길이가 범위를 벗어남
9000000NULL시간 값 900이 상한을 초과함
67NULL초 값 67이 유효하지 않음

날짜 및 시간 계열 타입에서 변환​

Datetime에서 변환​

동작 변경

4.0 버전부터 Datetime 타입에서 Time 타입으로의 변환을 지원합니다.

결과는 입력의 시간 부분이며, 이 변환은 항상 유효합니다.

예제​

입력 DATETIMETIME(4)으로 변환한 결과
2012-02-05 12:12:12.12345612:12:12.1235

Time에서 변환​

엄격 모드​

규칙 설명​

정밀도가 낮은 타입에서 높은 타입으로 변환하면 새로 생기는 소수 자릿수를 0으로 채우며, 이 변환은 항상 유효합니다.

정밀도가 높은 타입에서 낮은 타입으로 변환할 때는 자리 올림이 발생할 수 있으며, 앞자리로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.

오류 처리​

오버플로가 발생하면 오류를 보고합니다.

예제​

현재 날짜가 2025-04-29라고 가정하면 다음과 같습니다.

입력 TIME원본 타입대상 타입결과 TIME설명
00:00:00.123TIME(3)TIME(6)00:00:00.123000정밀도 증가
00:00:00.123456TIME(6)TIME(3)00:00:00.123정밀도 감소, 자리 올림 없음
120:00:00.99666TIME(6)TIME(2)120:00:01.00정밀도 감소, 초 단위로 자리 올림
838:59:59.999999TIME(6)TIME(5)오류자리 올림으로 오버플로가 발생하여 유효하지 않은 TIME 생성

비엄격 모드​

오류 처리를 제외하면 비엄격 모드의 동작은 엄격 모드와 완전히 동일합니다.

규칙 설명​

정밀도가 낮은 타입에서 높은 타입으로 변환하면 새로 생기는 소수 자릿수를 0으로 채우며, 이 변환은 항상 유효합니다.

정밀도가 높은 타입에서 낮은 타입으로 변환할 때는 자리 올림이 발생할 수 있으며, 앞자리로 계속 전파될 수 있습니다. 오버플로가 발생하면 변환된 값은 유효하지 않습니다.

오류 처리​

오버플로가 발생하면 NULL을 반환합니다.

예제​
입력 TIME원본 타입대상 타입결과 TIME설명
00:00:00.123TIME(3)TIME(6)00:00:00.123000정밀도 증가
00:00:00.123456TIME(6)TIME(3)00:00:00.123정밀도 감소, 자리 올림 없음
120:00:00.99666TIME(6)TIME(2)120:00:01.00정밀도 감소, 초 단위로 자리 올림
838:59:59.999999TIME(6)TIME(5)NULL자리 올림으로 오버플로가 발생하여 유효하지 않은 TIME 생성