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

String으로 형 변환(출력)

Boolean​

값이 true이면 1을 반환합니다. 그렇지 않으면 0을 반환합니다.

select cast(true as string) , cast(false as string);
+----------------------+-----------------------+
| cast(true as string) | cast(false as string) |
+----------------------+-----------------------+
| 1 | 0 |
+----------------------+-----------------------+

Integer​

숫자 값의 십진수 형식에 따라 변환하며, 앞에 0을 붙이지 않습니다. 음이 아닌 수에는 '+' 접두사가 없고, 음수에는 '-' 접두사가 붙습니다.

예:

select cast(cast("123" as int) as string) as str_value;
+-----------+
| str_value |
+-----------+
| 123 |
+-----------+

select cast(cast("-2147483648" as int) as string) as str_value;
+-------------+
| str_value |
+-------------+
| -2147483648 |
+-------------+

Float​

float 값을 문자열로 변환할 때 적용되는 세부 규칙은 다음과 같습니다:

  1. 특수 값 처리:

    • NaN(숫자가 아님)은 문자열 "NaN"으로 변환됩니다.

    • Infinity는 문자열 "Infinity"로 변환됩니다.

    • -Infinity는 문자열 "-Infinity"로 변환됩니다.

  2. 부호 처리:

    • 음수에는 '-' 접두사가 붙습니다.

    • 양수에는 부호 접두사가 없습니다.

    • 영에 대한 특수 처리:

      • -0.0은 "-0"으로 변환됩니다.

      • +0.0은 "0"으로 변환됩니다.

  3. 형식 규칙:

    • C printf의 'g' 형식 지정자 규칙(https://en.cppreference.com/w/c/io/fprintf 참조)에 따라 부동소수점 수를 변환합니다. 값과 유효 자릿수에 따라 십진 표기법 또는 과학적 표기법을 사용합니다. 유효 자릿수는 7로 설정됩니다. 'e' 스타일 변환 결과의 지수 X에 따라 다음 규칙을 적용합니다:

    • 7 > X >= -4이면 결과에 십진 표기법을 사용합니다.

    • 그렇지 않으면 소수점 뒤에 최대 6자리의 유효 숫자를 사용하는 과학적 표기법을 사용합니다.

    • 소수점 이하에서 뒤에 붙은 영을 제거합니다.

    • 소수점 뒤에 숫자가 없으면 소수점을 제거합니다.

예:

floatstring설명
123.456"123.456"
1234567"1234567"
123456.12345"123456.1"e < 7, 과학적 표기법을 사용하지 않음, 유효 자릿수 7
12345678.12345"1.234568e+07"e >= 7, 과학적 표기법 사용, 유효 자릿수 7
0.0001234567"0.0001234567"e >= -4, 과학적 표기법을 사용하지 않음
-0.0001234567"-0.0001234567"e >= -4, 과학적 표기법을 사용하지 않음
0.00001234567"1.234567e-05"e < -4, 과학적 표기법 사용
123.456000"123.456"뒤에 붙은 영 제거
123.000"123"소수점 제거
0.0"0"
-0.0"-0"음의 영
NaN"NaN"
Infinity"Infinity"
-Infinity"-Infinity"

Double​

double 값을 문자열로 변환할 때 적용되는 세부 규칙은 다음과 같습니다:

  1. 특수 값 처리:

    • NaN(숫자가 아님)은 문자열 "NaN"으로 변환됩니다.

    • Infinity는 문자열 "Infinity"로 변환됩니다.

    • -Infinity는 문자열 "-Infinity"로 변환됩니다.

  2. 부호 처리:

    • 음수에는 '-' 접두사가 붙습니다.

    • 양수에는 부호 접두사가 없습니다.

    • 영에 대한 특수 처리:

      • -0.0은 "-0"으로 변환됩니다.

      • +0.0은 "0"으로 변환됩니다.

  3. 형식 규칙:

    • C printf의 'g' 형식 지정자 규칙(https://en.cppreference.com/w/c/io/fprintf 참조)에 따라 부동소수점 수를 변환합니다. 값과 유효 자릿수에 따라 십진 표기법 또는 과학적 표기법을 사용합니다. 유효 자릿수는 16으로 설정됩니다. 'e' 스타일 변환 결과의 지수 X에 따라 다음 규칙을 적용합니다:

    • 16 > X >= -4이면 결과에 십진 표기법을 사용합니다.

    • 그렇지 않으면 소수점 뒤에 최대 15자리의 유효 숫자를 사용하는 과학적 표기법을 사용합니다.

    • 소수점 이하에서 뒤에 붙은 영을 제거합니다.

    • 소수점 뒤에 숫자가 없으면 소수점을 제거합니다.

예:

doublestring설명
1234567890123456.12345"1234567890123456"e < 16, 과학적 표기법을 사용하지 않음; 유효 자릿수 16
12345678901234567.12345"1.234567890123457e+16"e >= 16, 과학적 표기법 사용; 유효 자릿수 16
0.0001234567890123456789"0.0001234567890123457"e >= -4, 과학적 표기법을 사용하지 않음; 유효 자릿수 16
0.000000000000001234567890123456"1.234567890123456e-15"e < -4, 과학적 표기법 사용; 유효 자릿수 16
123.456000"123.456"뒤에 붙은 영 제거
123.000"123"끝에 있는 소수점 제거
0.0"0"
-0.0"-0"음의 영
NaN"NaN"
Infinity"Infinity"
-Infinity"-Infinity"

Decimal​

숫자 값의 십진수 형식에 따라 변환합니다. 음이 아닌 수에는 '+' 접두사가 없고, 음수에는 '-' 접두사가 붙으며, 앞에 0을 붙이지 않습니다.

Decimal(P[,S]) 타입은 출력 시 소수점 이하를 항상 S자리로 표시합니다. 소수 자릿수가 S보다 적으면 영으로 채웁니다. 예를 들어 숫자 123.456이 Decimal(18, 6) 타입이면 123.456000으로 변환됩니다.

예:

select cast(cast("123.456" as decimal(18, 6)) as string) as str_value;
+------------+
| str_value |
+------------+
| 123.456000 |
+------------+

select cast(cast("-2147483648" as decimalv3(12, 2)) as string) as str_value;
+----------------+
| str_value |
+----------------+
| -2147483648.00 |
+----------------+

Date​

Date 타입의 출력 형식은 "yyyy-MM-dd"이며, 4자리 연도, 2자리 월, 2자리 일을 "-"로 구분합니다.

예:

select cast(date('20210304') as string);
+----------------------------------+
| cast(date('20210304') as string) |
+----------------------------------+
| 2021-03-04 |
+----------------------------------+

Datetime​

Datetime 타입의 출력 형식은 "yyyy-MM-dd HH:mm:ss[.SSSSSS]"입니다. 타입의 Scale이 0이 아니면 소수점과 Scale자리의 소수 초를 출력합니다. 예:

select cast(cast('20210304' as datetime) as string);
+----------------------------------------------+
| cast(cast('20210304' as datetime) as string) |
+----------------------------------------------+
| 2021-03-04 00:00:00 |
+----------------------------------------------+

select cast(cast('20020304121212.123' as datetime(3)) as string);
+-----------------------------------------------------------+
| cast(cast('20020304121212.123' as datetime(3)) as string) |
+-----------------------------------------------------------+
| 2002-03-04 12:12:12.123 |
+-----------------------------------------------------------+

TIMESTAMP_NS​

TIMESTAMP_NS는 yyyy-MM-dd HH:mm:ss.SSSSSSSSS 형식으로 표시됩니다. 초의 소수 부분은 뒤에 붙는 영을 포함하여 항상 정확히 아홉 자리입니다. 출력에는 시간대가 포함되지 않습니다.

CHAR, VARCHAR 또는 STRING으로 변환할 때도 같은 표현을 사용합니다. NULL을 입력하면 NULL을 반환합니다.

SELECT CAST(CAST('2024-02-29 12:34:56.123456' AS TIMESTAMP_NS) AS STRING) AS str_value;
+-------------------------------+
| str_value |
+-------------------------------+
| 2024-02-29 12:34:56.123456000 |
+-------------------------------+

Time​

Time 타입은 "hour:minute:second" 형식으로 출력됩니다. 시간은 최대 3자리, 최소 2자리이며 음수일 수 있습니다. 분과 초는 항상 2자리입니다. 타입의 Scale이 0이 아니면 소수점과 Scale자리의 소수 초를 출력합니다.

예:

select cast(cast('0' as time) as string);
+-----------------------------------+
| cast(cast('0' as time) as string) |
+-----------------------------------+
| 00:00:00 |
+-----------------------------------+

select cast(cast('2001314' as time(3)) as string);
+--------------------------------------------+
| cast(cast('2001314' as time(3)) as string) |
+--------------------------------------------+
| 200:13:14.000 |
+--------------------------------------------+

select cast(cast('-2001314.123' as time(3)) as string);
+-------------------------------------------------+
| cast(cast('-2001314.123' as time(3)) as string) |
+-------------------------------------------------+
| -200:13:14.123 |
+-------------------------------------------------+

Array​

  1. 배열의 문자열 표현은 여는 대괄호 [로 시작하고 닫는 대괄호 ]로 끝납니다.

  2. 빈 배열은 []로 표현합니다.

  3. 문자열에서 배열 요소는 쉼표 뒤에 공백이 오는 ", "로 구분합니다.

  4. 배열 요소가 문자열 타입이면 문자열 표현을 작은따옴표 '로 감쌉니다.

  5. 문자열 타입이 아닌 요소는 따옴표를 추가하지 않고 각 타입의 문자열 표현으로 직접 변환합니다.

  6. 배열 요소가 NULL이면 문자열 null로 표현합니다.

select cast(array(1,2,3,4) as string);
+--------------------------------+
| cast(array(1,2,3,4) as string) |
+--------------------------------+
| [1, 2, 3, 4] |
+--------------------------------+

Map​

  1. Map의 문자열 표현은 여는 중괄호 {로 시작하고 닫는 중괄호 }로 끝납니다.

  2. Map이 비어 있으면 문자열 표현은 {}입니다.

  3. 문자열에서 Map의 키-값 쌍은 쉼표 뒤에 공백이 오는 ", "로 구분합니다.

  4. 키 표현:

    • 키가 문자열 타입이면 문자열 표현을 큰따옴표 "로 감쌉니다.

    • 키가 NULL이면 문자열 null로 표현합니다.

    • 문자열 타입이 아닌 키는 따옴표를 추가하지 않고 각 타입의 문자열 표현으로 직접 변환합니다.

  5. 값 표현:

    • 값이 문자열 타입이면 문자열 표현을 큰따옴표 "로 감쌉니다.

    • 값이 NULL이면 문자열 null로 표현합니다.

    • 문자열 타입이 아닌 값은 따옴표를 추가하지 않고 각 타입의 문자열 표현으로 직접 변환합니다.

  6. 키-값 쌍 구조: 각 키-값 쌍은 key:value 형식으로 표현하며, 키와 값은 콜론 :으로 구분합니다.

select cast(map("abc",123,"def",456) as string);
+------------------------------------------+
| cast(map("abc",123,"def",456) as string) |
+------------------------------------------+
| {"abc":123, "def":456} |
+------------------------------------------+

Struct​

  1. Struct의 문자열 표현은 여는 중괄호 {로 시작하고 닫는 중괄호 }로 끝납니다.

  2. Struct가 비어 있으면 문자열 표현은 {}입니다.

  3. Struct의 문자열 표현에는 필드 이름을 표시하지 않고 값만 표시합니다.

  4. 값 표현:

    • 값이 문자열 타입이면 문자열 표현을 큰따옴표 "로 감쌉니다.

    • 값이 NULL이면 문자열 null로 표현합니다.

    • 문자열 타입이 아닌 값은 따옴표를 추가하지 않고 각 타입의 문자열 표현으로 직접 변환합니다.

  5. 각 값은 쉼표 뒤에 공백이 오는 ", "로 구분합니다.

select struct(123,"abc",3.14);
+-----------------------------------------+
| struct(123,"abc",3.14) |
+-----------------------------------------+
| {"col1":123, "col2":"abc", "col3":3.14} |
+-----------------------------------------+
1 row in set (0.03 sec)

select cast(struct(123,"abc",3.14) as string);
+----------------------------------------+
| cast(struct(123,"abc",3.14) as string) |
+----------------------------------------+
| {123, "abc", 3.14} |
+----------------------------------------+

IPv6​

IPv6 타입의 출력 형식은 표준 IPv6 콜론 구분 십육진수 표기법입니다:

  1. 영이 가장 길게 연속된 구간을 찾아 ::로 압축합니다.
  2. 영이 아닌 그룹은 십육진수로 표현하며, 앞에 붙은 영을 제거합니다.
  3. 그룹은 :으로 구분합니다.

특수 처리​

  1. IPv4 매핑:
    처음 6개 그룹이 0이고 7번째 그룹이 0 또는 0xffff이면 마지막 4바이트를 IPv4 형식으로 표시합니다.
    예:

    select cast('::ffff:192.0.2.1' as ipv6);
    +-----------------------------+
    | cast('::ffff:192.0.2.1' as ipv6) |
    +-----------------------------+
    | ::ffff:192.0.2.1 |
    +-----------------------------+
  2. 영 압축 규칙:

    • 영이 가장 길게 연속된 구간만 압축합니다.
    • 압축하려면 영인 그룹이 최소 2개 연속되어야 합니다.
    • 길이가 같은 영 구간이 여러 개이면 첫 번째 구간을 압축합니다.

예:

select cast('2001:0db8:0000:0000:0000:0000:1428:57ab' as ipv6);
+---------------------------------------------------------+
| cast('2001:0db8:0000:0000:0000:0000:1428:57ab' as ipv6) |
+---------------------------------------------------------+
| 2001:db8::1428:57ab |
+---------------------------------------------------------+

select cast('::192.0.2.1' as ipv6);
+-----------------------------+
| cast('::192.0.2.1' as ipv6) |
+-----------------------------+
| ::192.0.2.1 |
+-----------------------------+

UUID​

네이티브 UUID는 입력의 대소문자나 하이픈 유무와 관계없이 36자의 소문자 정규 형식 텍스트(8-4-4-4-12)로 출력됩니다. NULL을 입력하면 NULL을 반환합니다. UUID 변환을 참조하세요.