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 값을 문자열로 변환하는 세부 규칙은 다음과 같습니다.
-
특수 값 처리:
-
NaN(숫자가 아님)은 문자열 "NaN"으로 변환됩니다. -
Infinity는 문자열 "Infinity"로 변환됩니다. -
-Infinity는 문자열 "-Infinity"로 변환됩니다.
-
-
부호 처리:
-
음수에는 '-' 접두사를 붙입니다.
-
양수에는 부호 접두사를 붙이지 않습니다.
-
값이 영일 때의 특수 처리:
-
-0.0은 "-0"으로 변환됩니다. -
+0.0은 "0"으로 변환됩니다.
-
-
-
형식 규칙:
-
C printf의 'g' 형식 지정자 규칙(https://en.cppreference.com/w/c/io/fprintf 참조)에 따라 부동소수점 수를 값과 유효 자릿수에 맞춰 십진 표기법 또는 과학적 표기법으로 변환합니다. 유효 자릿수는 7로 설정됩니다. 'e' 스타일 변환 결과의 지수 X에 따라 다음 규칙을 적용합니다.
-
7 > X >= -4이면 십진 표기법을 사용합니다.
-
그 외에는 소수점 이하 유효 자릿수가 최대 6인 과학적 표기법을 사용합니다.
-
소수점 이하 끝에 붙은 영을 제거합니다.
-
소수점 이하에 숫자가 없으면 소수점을 제거합니다.
-
예:
| float | string | 설명 |
|---|---|---|
| 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 값을 문자열로 변환하는 세부 규칙은 다음과 같습니다.
-
특수 값 처리:
-
NaN(숫자가 아님)은 문자열 "NaN"으로 변환됩니다. -
Infinity는 문자열 "Infinity"로 변환됩니다. -
-Infinity는 문자열 "-Infinity"로 변환됩니다.
-
-
부호 처리:
-
음수에는 '-' 접두사를 붙입니다.
-
양수에는 부호 접두사를 붙이지 않습니다.
-
값이 영일 때의 특수 처리:
-
-0.0은 "-0"으로 변환됩니다. -
+0.0은 "0"으로 변환됩니다.
-
-
-
형식 규칙:
-
C printf의 'g' 형식 지정자 규칙(https://en.cppreference.com/w/c/io/fprintf 참조)에 따라 부동소수점 수를 값과 유효 자릿수에 맞춰 십진 표기법 또는 과학적 표기법으로 변환합니다. 유효 자릿수는 16으로 설정됩니다. 'e' 스타일 변환 결과의 지수 X에 따라 다음 규칙을 적용합니다.
-
16 > X >= -4이면 십진 표기법을 사용합니다.
-
그 외에는 소수점 이하 유효 자릿수가 최대 15인 과학적 표기법을 사용합니다.
-
소수점 이하 끝에 붙은 영을 제거합니다.
-
소수점 이하에 숫자가 없으면 소수점을 제거합니다.
-
예:
| double | string | 설명 |
|---|---|---|
| 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 타입
-
배열의 문자열 표현은 여는 대괄호
[로 시작하고 닫는 대괄호]로 끝납니다. -
빈 배열은
[]로 표시합니다. -
문자열에서 배열 요소는 쉼표 뒤에 공백이 오는
", "로 구분합니다. -
배열 요소가 문자열 타입이면 해당 요소의 문자열 표현을 작은따옴표
'로 감쌉니다. -
문자열 타입이 아닌 요소는 따옴표를 추가하지 않고 해당 요소의 문자열 표현으로 직접 변환합니다.
-
배열 요소가
NULL이면 문자열null로 표시합니다.
select cast(array(1,2,3,4) as string);
+--------------------------------+
| cast(array(1,2,3,4) as string) |
+--------------------------------+
| [1, 2, 3, 4] |
+--------------------------------+
Map 타입
-
Map의 문자열 표현은 여는 중괄호
{로 시작하고 닫는 중괄호}로 끝납니다. -
Map이 비어 있으면 문자열 표현은
{}입니다. -
문자열에서 Map의 키-값 쌍은 쉼표 뒤에 공백이 오는
", "로 구분합니다. -
키 표현:
-
키가 문자열 타입이면 해당 키의 문자열 표현을 큰따옴표
"로 감쌉니다. -
키가
NULL이면 문자열null로 표시합니다. -
문자열 타입이 아닌 키는 따옴표를 추가하지 않고 해당 키의 문자열 표현으로 직접 변환합니다.
-
-
값 표현:
-
값이 문자열 타입이면 해당 값의 문자열 표현을 큰따옴표
"로 감쌉니다. -
값이
NULL이면 문자열null로 표시합니다. -
문자열 타입이 아닌 값은 따옴표를 추가하지 않고 해당 값의 문자열 표현으로 직접 변환합니다.
-
-
키-값 쌍 구조: 각 키-값 쌍은
key:value형식으로 표시하며, 키와 값은 콜론:으로 구분합니다.
select cast(map("abc",123,"def",456) as string);
+------------------------------------------+
| cast(map("abc",123,"def",456) as string) |
+------------------------------------------+
| {"abc":123, "def":456} |
+------------------------------------------+
Struct 타입
-
Struct의 문자열 표현은 여는 중괄호
{로 시작하고 닫는 중괄호}로 끝납니다. -
Struct가 비어 있으면 문자열 표현은
{}입니다. -
Struct의 문자열 표현에는 필드 이름 없이 값만 표시합니다.
-
값 표현:
-
값이 문자열 타입이면 해당 값의 문자열 표현을 큰따옴표
"로 감쌉니다. -
값이
NULL이면 문자열null로 표시합니다. -
문자열 타입이 아닌 값은 따옴표를 추가하지 않고 해당 값의 문자열 표현으로 직접 변환합니다.
-
-
각 값은 쉼표 뒤에 공백이 오는
", "로 구분합니다.
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 십육진수 표기법입니다.
- 영이 연속되는 가장 긴 구간을 찾아
::로 압축합니다. - 영이 아닌 그룹은 십육진수로 표시하며, 앞에 붙은 영을 제거합니다.
- 그룹은
:으로 구분합니다.
특수 처리
-
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개 연속되어야 합니다.
- 길이가 같은 영 구간이 여러 개 있으면 첫 번째 구간을 압축합니다.
예:
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 |
+-----------------------------+