メインコンテンツまでスキップ
バージョン: 26.x

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

数値の10進形式に従って変換し、プレフィックス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 (Not a Number) は文字列 "NaN" に変換される

    • Infinity は文字列 "Infinity" に変換される

    • -Infinity は文字列 "-Infinity" に変換される

  2. 符号の処理:

    • 負の数には '-' プレフィックスが付く

    • 正の数には符号プレフィックスが付かない

    • ゼロ値の特殊な処理:

      • -0.0 は "-0" に変換される

      • +0.0 は "0" に変換される

  3. フォーマットルール:

    • C printf の 'g' フォーマット指定子のセマンティクス (https://en.cppreference.com/w/c/io/fprintf を参照) を使用して、値と有効桁数に応じて浮動小数点数を10進記法または科学記法に変換する。有効桁数は7に設定される。'e' スタイル変換結果の指数Xが:

    • 7 > X >= -4 の場合、結果は10進記法を使用する

    • そうでなければ、小数点以下最大6桁の有効桁数で科学記法を使用する

    • 小数点以下の末尾のゼロを削除する

    • 小数点以下に桁がない場合、小数点を削除する

例:

floatstringcomment
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 (Not a Number) は文字列 "NaN" に変換される

    • Infinity は文字列 "Infinity" に変換される

    • -Infinity は文字列 "-Infinity" に変換される

  2. 符号の処理:

    • 負の数には '-' プレフィックスが付く

    • 正の数には符号プレフィックスが付かない

    • ゼロ値の特殊な処理:

      • -0.0 は "-0" に変換される

      • +0.0 は "0" に変換される

  3. フォーマットルール:

    • C printf の 'g' フォーマット指定子のセマンティクス (https://en.cppreference.com/w/c/io/fprintf を参照) を使用して、値と有効桁数に応じて浮動小数点数を10進記法または科学記法に変換する。有効桁数は16に設定される。'e' スタイル変換結果の指数Xが:

    • 16 > X >= -4 の場合、結果は10進記法を使用する

    • そうでなければ、小数点以下最大15桁の有効桁数で科学記法を使用する

    • 小数点以下の末尾のゼロを削除する

    • 小数点以下に桁がない場合、小数点を削除する

例:

doublestringcomment
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

数値の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」形式で出力されます。hourは最大3桁、最小2桁で、負の値も可能です。minuteとsecondは常に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コロン16進記法です:

  1. 最長の連続するゼロセグメントを見つけてダブルコロンで圧縮する。
  2. 非ゼログループは16進数で表現する(先頭のゼロを除去)。
  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 |
+-----------------------------+