文字列への変換(出力)
Boolean 型
値が true の場合は 1、それ以外の場合は 0 を返します。
select cast(true as string) , cast(false as string);
+----------------------+-----------------------+
| cast(true as string) | cast(false as string) |
+----------------------+-----------------------+
| 1 | 0 |
+----------------------+-----------------------+
整数型
数値を十進数表記に変換します。先頭に 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 より少ない場合は、ゼロで埋めます。たとえば、Decimal(18, 6) 型の数値 123.456 は 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" 形式で出力されます。時は 2~3 桁で、負の値にもなります。分と秒は常に 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 は
{}と表します。 -
文字列内のキーと値のペアは、コンマと空白の組み合わせ
", "で区切ります。 -
キーの表現:
-
キーが文字列型の場合、その文字列表現を二重引用符
"で囲みます。 -
キーが
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 |
+-----------------------------+