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

MaxCompute:CAST

最終更新日:May 14, 2025

MaxCompute の CAST 関数は、データ型の変換を行う関数です。この関数は、expr パラメーターで指定されたデータソースのデータ型を、type パラメーターで指定されたデータ型に変換します。このトピックでは、CAST 関数の構文とパラメーターについて説明します。また、CAST 関数の使用方法の例も示します。

構文

cast(<expr> as <type>)

パラメーター

expr: 必須。データ型を変換するデータソース。

type: 必須。変換先のデータ型。使用方法:

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

  • cast(string as bigint): STRING 型の値を BIGINT 型に変換します。文字列が INTEGER 形式で表現された数値で構成されている場合、文字列は BIGINT 型に変換されます。文字列が FLOAT または EXPONENTIAL 形式で表現された数値で構成されている場合、文字列は DOUBLE 型に変換された後、BIGINT 型に変換されます。

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

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

    CAST 関数は、JSON 型と次の基本データ型の間でも値を変換できます。STRING, BIGINT, INT, TINYINT, SMALLINT, DOUBLE, FLOAT, BOOLEAN, and SQL-TYPE。使用方法:

    • cast(json as string): JSON 式を STRING 型の値に変換します。JSON 式は ARRAY 型または OBJECT 型にはできません。

    • cast(string as json): STRING 型の値を JSON 式に変換します。JSON 式は STRING 型です。CAST 関数は JSON_PARSE 関数および JSON_FORMAT 関数とは異なることに注意してください。JSON_PARSE 関数を使用すると、有効な JSON 文字列のみを JSON データ(JSON オブジェクトの場合があります)に変換できます。CAST 関数を使用すると、文字列を STRING 型の値を含む JSON 文字列に変換できます。

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

    • 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 に設定すると、末尾の 0 が削除された 10 進数が返されます。

    • odps.sql.decimal.tostring.trimzero を false に設定すると、末尾に 0 がある 10 進数が返されます。

      重要

      odps.sql.decimal.tostring.trimzero パラメーターは、テーブルからデータが読み取られる場合にのみ有効になります。このパラメーターは、静的な値には影響しません。

  • 例 1: 一般的な使用方法。サンプルステートメント:

    -- 戻り値は 1 です。
    select cast('1' as bigint);
  • 例 2: STRING 型の値を BOOLEAN 型に変換します。STRING 型の値が空の文字列の場合、false が返されます。それ以外の場合、true が返されます。サンプルステートメント:

    • STRING 型の値は空の文字列です。

      select cast("" as boolean);
      -- 戻り値は false です。
      +------+
      | _c0  |
      +------+
      | false |
      +------+
    • STRING 型の値は空でない文字列です。

      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 が指定されています。

    setprojectodps.function.strictmode=false;
    select cast('123abc'as bigint);
    -- 次の結果が返されます。
    +------------+
    |_c0|
    +------------+
    |123|
    +------------+
  • 例 6: setproject odps.function.strictmode=true が指定されています。

    setprojectodps.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);
    
    -- odps.sql.decimal.tostring.trimzero パラメーターを true に設定するか、odps.sql.decimal.tostring.trimzero パラメーターを構成しません。
    set odps.sql.decimal.tostring.trimzero=true;
    -- 10 進数の末尾の 0 を削除します。
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    -- 次の結果が返されます。
    +------------+------------+
    | _c0        | _c1        |
    +------------+------------+
    | 12.455     | 12.34      |
    +------------+------------+
    
    -- odps.sql.decimal.tostring.trimzero パラメーターを false に設定します。
    set odps.sql.decimal.tostring.trimzero=false;
    -- 10 進数の末尾の 0 を保持します。
    select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot;
    -- 次の結果が返されます。
    +------------+------------+
    | _c0        | _c1        |
    +------------+------------+
    | 12.455     | 12.340     |
    +------------+------------+
    
    -- odps.sql.decimal.tostring.trimzero パラメーターは、静的値には影響しません。
    set odps.sql.decimal.tostring.trimzero=false;
    select cast(round(12345.120BD,3) as string);
    -- 次の結果が返されます。
    +------------+
    | _c0        |
    +------------+
    | 12345.12   |
    +------------+
  • 例 8: STRING 型と JSON 型の間で値を変換します。

    -- JSON 数値を STRING 型の値に変換します。
    select cast(json '123' as string);
    -- 次の結果が返されます。
    +-----+
    | _c0 |
    +-----+
    | 123 |
    +-----+
    
    -- JSON 文字列を STRING 型の値に変換します。
    select cast(json '"abc"' as string);
    -- 次の結果が返されます。
    +-----+
    | _c0 |
    +-----+
    | abc |
    +-----+
    
    -- JSON ブール値を STRING 型の値に変換します。
    select cast(json 'true' as string); 
    -- 次の結果が返されます。
    +-----+
    | _c0 |
    +-----+
    | TRUE |
    +-----+
    
    -- JSON 'null' を STRING 型の null 値に変換します。
    select cast(json 'null' as string);
    -- 次の結果が返されます。
    +-----+
    | _c0 |
    +-----+
    | NULL |
    +-----+
    
    -- 文字列を JSON 型の値に変換します。
    select cast('{"a":2}' as json); 
    -- 次の結果が返されます。
    +-----+
    | _c0 |
    +-----+
    | "{\"a\":2}" |
    +-----+
    
    
    -- 誤ったサンプルステートメント。ARRAY 型または OBJECT 型の JSON 式を STRING 型の値に変換します。
    select cast(json '{"a":2}' as string);
    -- エラーが返されます。
    FAILED: ODPS-0123091:Illegal type cast - Unsupported cast from json array/object to string
  • 例 9: NUMBER 型と 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 型の値を BIGINT 型に変換します。
    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 |
    +------+
    
    -- JSON 配列または JSON オブジェクトを BOOLEAN 型に変換します。
    select cast(json '[1,2]' as boolean);
    -- エラーが返されます。
    Unsupported cast from json array/object to boolean
  • 例 11: null 値と JSON 型の値の間で変換します。

    -- null 値を STRING 型の値に変換します。
    select json_type(cast(null as json));
    -- 次の結果が返されます。
    +-----+
    | _c0 |
    +-----+
    | NULL |
    +-----+

関連関数

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

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