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

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 |
+-----------------------------------------------------------+

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 |
+-----------------------------+