すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:CAST

最終更新日:Aug 22, 2026

MaxCompute の CAST 関数は、式の結果をターゲットデータ型に変換します。このトピックでは、CAST 関数のコマンド形式、パラメーター、使用例について説明します。

コマンド形式

cast(<expr> as <type>)

パラメーターの説明

expr:必須。ソースデータ。

type:必須。ターゲットデータ型。使用法は次のとおりです。

  • cast(double as bigint):DOUBLE 値を BIGINT 値に変換します。

  • cast(string as bigint):文字列を BIGINT 値に変換します。文字列が整数を表す場合は、直接変換されます。文字列が浮動小数点数または指数表記の数値を表す場合は、最初に DOUBLE 型に変換され、その後 BIGINT 型に変換されます。

  • cast(string as datetime) または cast(datetime as string):デフォルトの日付形式 yyyy-mm-dd hh:mi:ss が使用されます。

  • 基本データ型と JSON 型の間の変換。

    CAST 関数は、JSON 型と基本データ型の間の変換もサポートしています。これには JSON、STRING、BIGINT、INT、TINYINT、SMALLINT、DOUBLE、FLOAT、BOOLEAN、および SQL-TYPE が含まれます。以下はコマンド例です。

    • cast(json as string):JSON 式を STRING 型に変換します。JSON 式を配列またはオブジェクトにすることはできません。

    • cast(string as json):STRING 値を STRING 型の JSON 式に変換します。これは json_parse および json_format とは異なります。json_parse は有効な JSON 文字列を JSON 値に変換し、JSON オブジェクトになることもあります。一方、cast(string as json) は任意の文字列を JSON 文字列に変換します。

    • cast(null as json):NULL 値を JSON 型に変換します。

    • cast(json 'null' as ...)json 'null'null は SQL の null に変換されます。

戻り値の説明

  • ターゲットデータ型の値を返します。

  • setproject odps.function.strictmode=false を実行した場合、関数は文字列の先頭から、数字以外の文字が出現するまでの数値を返します。

  • setproject odps.function.strictmode=true を実行した場合、エラーが返されます。

  • DECIMAL 型に値を変換する場合:

    • odps.sql.decimal.tostring.trimzero=true を設定した場合、小数点以下の末尾のゼロが削除されます。

    • odps.sql.decimal.tostring.trimzero=false を設定した場合、小数点以下の末尾のゼロが保持されます。

      重要

      odps.sql.decimal.tostring.trimzero パラメーターは、テーブルから取得したデータと静的値の両方に影響します。

使用例

  • 例 1:一般的な使用法。

    -- 1 を返します。
    select cast('1' as bigint);
  • 例 2:STRING 値を BOOLEAN 値に変換します。文字列が空の場合、false が返されます。それ以外の場合は、true が返されます。

    • 文字列が空の場合。

      select cast("" as boolean);
      -- 戻り値
      +-------+
      | _c0   |
      +-------+
      | false |
      +-------+
    • 文字列が空でない場合。

      select cast("false" as boolean);
      -- true を返します
      +------+
      | _c0  |
      +------+
      | true |
      +------+
  • 例 3:文字列を日付に変換します。

    -- 文字列を日付に変換します。
    select cast("2022-12-20" as date);
    -- 戻り値
    +------------+
    | _c0        |
    +------------+
    | 2022-12-20 |
    +------------+
    
    -- 時刻部分を含む日付文字列を日付に変換します。
    select cast("2022-12-20 00:01:01" as date);
    -- 戻り値
    +------------+
    | _c0        |
    +------------+
    | NULL       |
    +------------+
    -- 値を正しく表示するには、次のパラメーターを設定します。
    set odps.sql.executionengine.enable.string.to.date.full.format= true;
    select cast("2022-12-20 00:01:01" as date);
    -- 戻り値
    +------------+
    | _c0        |
    +------------+
    | 2022-12-20 |
    +------------+
    説明

    デフォルトでは、odps.sql.executionengine.enable.string.to.date.full.format パラメーターは false です。時刻部分を含む日付文字列を変換するには、このパラメーターを true に設定する必要があります。

  • 例 4 (不正なコマンドの例): 不正な使用方法です。変換が失敗した場合、またはサポートされていない場合は、例外がスローされます。次のコマンドは不正な使用方法の例です。

    select cast('abc' as bigint);
  • 例 5:setproject odps.function.strictmode=false を設定した場合の例。

    setproject odps.function.strictmode=false;
    select cast('123abc' as bigint);
    -- 戻り値
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
  • 例 6:setproject odps.function.strictmode=true を設定した場合の例。

    setproject odps.function.strictmode=true;
    select cast('123abc' as bigint);
    -- 戻り値
    FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint.
  • 例 7:odps.sql.decimal.tostring.trimzero を設定した場合の例。

    -- テーブルを作成します。
    create table mf_dot (dcm1 decimal(38,18),
                         dcm2 decimal(38,18));
    -- データを挿入します。
    insert into table mf_dot values (12.45500BD,12.3400BD);
    
    -- フラグが true の場合、または設定されていない場合。
    set odps.sql.decimal.tostring.trimzero=true;
    -- 小数点以下の末尾のゼロを削除します。
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    -- 戻り値
    +--------+-------+
    | _c0    | _c1   |
    +--------+-------+
    | 12.455 | 12.34 |
    +--------+-------+
    
    -- フラグが false の場合。
    set odps.sql.decimal.tostring.trimzero=false;
    -- 小数点以下の末尾のゼロを保持します。
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    -- 戻り値
    +--------+--------+
    | _c0    | _c1    |
    +--------+--------+
    | 12.455 | 12.340 |
    +--------+--------+
    
    -- このパラメーターは静的値にも適用されます。
    set odps.sql.decimal.tostring.trimzero=false;
    select cast(round(12345.120BD,3) as string);
    -- 戻り値:
    +-----------+
    | _c0       |
    +-----------+
    | 12345.120 |
    +-----------+
  • 例 8:STRING 型と JSON 型の間の変換

    -- JSON を文字列に変換します。
    select cast(json '123' as string);
    -- 戻り値:
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    -- JSON を文字列に変換します。
    select cast(json '"abc"' as string);
    -- 戻り値:
    +-----+
    | _c0 |
    +-----+
    | abc |
    +-----+
    
    -- JSON を文字列に変換します。
    select cast(json 'true' as string); 
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | TRUE |
    +------+
    
    -- JSON を文字列に変換します。
    select cast(json 'null' as string);
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | NULL |
    +------+
    
    -- 文字列を JSON に変換します。
    select cast('{"a":2}' as json); 
    -- 戻り値:
    +-----------+
    | _c0       |
    +-----------+
    | "{\"a\":2}" |
    +-----------+
    
    
    -- JSON を文字列に変換する誤った例。配列型またはオブジェクト型の JSON 式を文字列に変換することはサポートされていません。
    select cast(json '{"a":2}' as string);
    -- エラーが返されます:
    FAILED: ODPS-0123091:Illegal type cast - Unsupported cast from json array/object to string
  • 例 9:数値型と JSON 型の間の変換

    -- JSON を BIGINT に変換します。
    select cast(json '123' as bigint);
    -- 戻り値:
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    -- JSON を FLOAT に変換します。
    select cast(json '"1.23"' as float);
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | 1.23 |
    +------+
    
    -- JSON を DOUBLE に変換します。
    select cast(json '1.23' as double);
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | 1.23 |
    +------+
    
    -- INT を JSON に変換します。
    select cast(123 as json);
    -- 戻り値:
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    -- FLOAT を JSON に変換します。
    select cast(1.23 as json);
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | 1.23 |
    +------+
  • 例 10:BOOLEAN 型と JSON 型の間の変換

    -- BOOLEAN を JSON に変換します。
    select cast(true as json);
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | true |
    +------+
    
    -- JSON を BOOLEAN に変換します。
    select cast(json 'false' as boolean);
    -- 戻り値:
    +-------+
    | _c0   |
    +-------+
    | false |
    +-------+
    
    -- JSON を BOOLEAN に変換します。
    select cast(json '"abc"' as boolean);
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | true |
    +------+
    
    -- 配列またはオブジェクトを BOOLEAN に変換することはできません。
    select cast(json '[1,2]' as boolean);
    -- エラーが返されます:
    Unsupported cast from json array/object to boolean
  • 例 11:NULL 型と JSON 型の間の変換

    -- NULL を JSON に変換します。
    select json_type(cast(null as json));
    -- 戻り値:
    +------+
    | _c0  |
    +------+
    | NULL |
    +------+

関連する関数

CAST 関数は複雑な型関数です。 ARRAY、MAP、STRUCT、JSON などの複雑なデータ型を処理する関数については、「複雑な型関数」をご参照ください。

CAST 関数は、別のタイプの関数としても分類されます。他のビジネスシナリオの関数に関する詳細については、「その他の関数」をご参照ください。