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

MaxCompute:データ型変換

最終更新日:Aug 25, 2026

MaxCompute SQL では、異なるデータ型間の変換が可能です。この変換には、明示的な変換と暗黙的な変換があります。

明示的な変換

明示的な変換では、CAST 関数を使用して、あるデータ型の値を別のデータ型に変換します。次の表に、MaxCompute SQL でサポートされている明示的な変換を示します。この関数の詳細については、「CAST」をご参照ください。

変換元/変換先

BIGINT

DOUBLE

STRING

DATETIME

BOOLEAN

DECIMAL

FLOAT

BIGINT

N/A

Y

Y

N

Y

Y

Y

DOUBLE

Y

N/A

Y

N

Y

Y

Y

STRING

Y

Y

N/A

Y

Y

Y

Y

DATETIME

N

N

Y

N/A

N

N

N

BOOLEAN

Y

Y

Y

N

N/A

Y

Y

DECIMAL

Y

Y

Y

N

Y

N/A

Y

FLOAT

Y

Y

Y

N

Y

Y

N/A

この表では、Y は変換がサポートされていることを示し、N はサポートされていないことを示し、N/A は変換が不要であることを示します。サポートされていない明示的な変換を実行すると、エラーが返されます。

  • サンプルデータ

    説明

    以下の例では、このサンプルデータを含む user テーブルを使用します。

    create table if not exists user (
      user_name string,
    	user_id bigint,
    	age bigint   
    );
    insert into user values ('zhangsan',111,20);
  • SELECT CAST(user_id AS DOUBLE) AS new_id from user;
    SELECT CAST('2015-10-01 00:00:00' AS DATETIME) AS new_date;
    SELECT CAST(ARRAY(1,2,3) AS ARRAY<STRING>);
    SELECT CONCAT_WS(',', CAST(ARRAY(1, 2) AS ARRAY<STRING>));

使用上の注意と制限事項

  • DOUBLE 型の値を BIGINT 型に変換すると、小数部が切り捨てられます。例: CAST(1.6 AS BIGINT) = 1

  • DOUBLE フォーマットの STRING 型の値を BIGINT 型に変換すると、まず DOUBLE 型に変換された後、BIGINT 型に変換され、小数部が切り捨てられます。例: CAST("1.6" AS BIGINT) = 1

  • BIGINT フォーマットの STRING 型の値を DOUBLE 型に変換できます。結果は小数点以下 1 桁になります。例: CAST("1" AS DOUBLE) = 1.0

  • DATETIME 型への変換では、デフォルトフォーマット yyyy-mm-dd hh:mi:ss が使用されます。

  • 直接的な明示的変換をサポートしていない一部のデータ型は、組み込み関数を使用して変換できます。たとえば、TO_CHAR 関数を使用して BOOLEAN 値を STRING 型に変換できます。詳細については、「TO_CHAR」をご参照ください。また、TO_DATE 関数は STRING 値の DATETIME 型への変換もサポートしています。詳細については、「TO_DATE」をご参照ください。

  • DECIMAL の値の範囲を超えると、CAST STRING TO DECIMAL でオーバーフローエラーやデータの切り捨てなどの問題が発生する可能性があります。

  • DECIMAL 型を DOUBLE 型または FLOAT 型に明示的に変換すると、精度が低下する可能性があります。通貨計算などの高精度が求められるシナリオでは、DECIMAL 型の使用を推奨します。

  • MaxCompute は、複合データ型の変換をサポートしています。複合データ型の暗黙的または明示的な変換では、そのサブタイプも変換可能である必要があります。STRUCT を変換する場合、フィールド名が一致する必要はありませんが、フィールド数が同じで、対応するフィールドが暗黙的または明示的に変換可能である必要があります。例:

    • ARRAY<BIGINT>ARRAY<STRING> に暗黙的または明示的に変換できます。

    • ARRAY<BIGINT>ARRAY<INT> に明示的に変換できますが、暗黙的には変換できません。

    • ARRAY<BIGINT>ARRAY<DATETIME> に暗黙的にも明示的にも変換できません。

    • STRUCT<a:BIGINT,b:INT>STRUCT<col1:STRING,col2:BIGINT> に暗黙的に変換できますが、STRUCT<a:STRING> には暗黙的にも明示的にも変換できません。

暗黙的な変換とその範囲

暗黙的な変換は、MaxCompute が実行時にコンテキストと変換ルールに基づいて自動的に実行するデータ型変換です。次の表に、MaxCompute がサポートする暗黙的な変換を示します。

変換元/変換先

BOOLEAN

TINYINT

SMALLINT

INT

BIGINT

FLOAT

BOOLEAN

N/A

N

N

N

N

N

TINYINT

N

N/A

Y

Y

Y

Y

SMALLINT

N

N

N/A

Y

Y

Y

INT

N

N

N

N/A

Y

Y

BIGINT

N

N

N

N

N/A

Y

FLOAT

N

N

N

N

Y

N/A

変換元/変換先

DOUBLE

DECIMAL

STRING

VARCHAR

TIMESTAMP

BINARY

DOUBLE

N/A

Y

Y

Y

N

N

DECIMAL

N

N/A

Y

Y

N

N

STRING

Y

Y

N/A

Y

N

N

VARCHAR

Y

Y

Y

N/A

N

N

TIMESTAMP

N

N

Y

Y

N/A

N

BINARY

N

N

N

N

N

N/A

これらの表では、Y は変換がサポートされていることを示し、N はサポートされていないことを示し、N/A は変換が不要であることを示します。サポートされていない暗黙的な変換や、実行時に失敗した変換の場合、MaxCompute はエラーを返します。

説明
  • MaxCompute 2.0 では、DECIMAL 型と DATETIME 型の定数定義が導入されています。たとえば、100BD は値 100 の DECIMAL 定数、2017-11-11 00:00:00 は DATETIME 定数です。これらの定数は、VALUES 句やテーブルで直接使用できます。

  • MaxCompute はコンテキストに基づいて暗黙的な変換を自動的に実行するため、データ型が一致しない場合は、CAST を使用して明示的に変換することを推奨します。

  • 暗黙的な変換ルールは、特定の範囲内でのみ有効です。一部の範囲では、これらのルールのサブセットのみが適用される場合があります。

SELECT user_id+age+'12345', CONCAT(user_name,user_id,age) FROM user;

暗黙的な変換のルールは、演算子によって異なります。

  • 関係演算子における暗黙的な変換

    関係演算子には、=, <>, <, <=, >, >=, IS NULL, IS NOT NULL, LIKE, RLIKE, and IN が含まれます。LIKE, RLIKE, and IN の暗黙的な変換ルールは、他の関係演算子とは異なり、個別に説明します。このセクションのルールは、これら 3 つの演算子には適用されません。

    関係演算で異なるデータ型が使用される場合、次のルールに従って暗黙的に変換されます。

    変換元/変換先

    BIGINT

    DOUBLE

    STRING

    DATETIME

    BOOLEAN

    DECIMAL

    BIGINT

    N/A

    DOUBLE

    DOUBLE

    N

    N

    DECIMAL

    DOUBLE

    DOUBLE

    N/A

    DOUBLE

    N

    N

    DECIMAL

    STRING

    DOUBLE

    DOUBLE

    N/A

    DATETIME

    N

    DECIMAL

    DATETIME

    N

    N

    DATETIME

    N/A

    N

    N

    BOOLEAN

    N

    N

    N

    N

    N/A

    N

    DECIMAL

    DECIMAL

    DECIMAL

    DECIMAL

    N

    N

    N/A

    説明
    • 比較される 2 つのデータ型が暗黙的に変換できない場合、関係演算は失敗し、エラーが返されます。

    • 関係演算子の詳細については、「演算子」をご参照ください。

  • 特殊な関係演算子における暗黙的な変換

    特殊な関係演算子には、LIKE, RLIKE, and IN が含まれます。

    • LIKE と RLIKE の構文は次のとおりです。

      source LIKE pattern;  
      source RLIKE pattern;
      説明
      • LIKE と RLIKE の source パラメーターと pattern パラメーターは、STRING 型である必要があります。

      • 他のデータ型は使用できず、この操作のために STRING 型に暗黙的に変換されることもありません。

    • IN の構文は次のとおりです。

      key IN (value1, value2, …)
      説明
      • IN 式では、値リスト内のすべての値が同じデータ型である必要があります。

      • キーと値を比較する際、型に BIGINT、DOUBLE、STRING が含まれる場合は、すべてを DOUBLE に変換することを推奨します。型に DATETIME と STRING が含まれる場合は、すべてを DATETIME に変換することを推奨します。他のデータ型変換は許可されていません。

  • 算術演算子における暗黙的な変換

    算術演算子には、+, -, *, /, and % が含まれます。その暗黙的な変換ルールは次のとおりです。

    • 算術演算では、STRING、BIGINT、DOUBLE、DECIMAL 型のみ使用できます。

    • STRING 値は、演算の前に暗黙的に DOUBLE 型に変換されます。

    • BIGINT 型は、DOUBLE 型との計算で使用される場合、暗黙的に DOUBLE 型に変換されます。

    • DATETIME 型と BOOLEAN 型は算術演算では使用できません。

  • 論理演算子における暗黙的な変換

    論理演算子には、and, or, and not が含まれます。その暗黙的な変換ルールは次のとおりです。

    • 論理演算では、BOOLEAN 値のみ使用できます。

    • 他のデータ型は論理演算では使用できず、この目的のために暗黙的に変換されることもありません。

組み込み関数における暗黙的な変換

MaxCompute SQL は、任意の行の 1 つ以上の列に対して計算を実行し、さまざまなデータ型を返すための幅広い組み込み関数を提供します。その暗黙的な変換ルールは次のとおりです。

  • 関数を呼び出すとき、入力パラメーターのデータ型がそのパラメーターに定義されている型と一致しない場合、パラメーターは要求される型に暗黙的に変換されます。

  • 暗黙的な変換ルールは、MaxCompute SQL の各組み込み関数によって異なります。

CASE WHEN 式における暗黙的な変換

CASE WHEN 式の詳細については、「CASE WHEN式」をご参照ください。暗黙的な変換ルールは次のとおりです。

  • 戻り値の型に BIGINT と DOUBLE のみが含まれる場合、すべて DOUBLE に変換されます。

  • いずれかの戻り値が STRING 型である可能性がある場合、すべての戻り値は STRING 型に変換されます。BOOLEAN などの型が変換できない場合は、エラーが返されます。

  • 他のデータ型変換は許可されていません。

STRING 型と DATETIME 型の変換

MaxCompute は、STRING 型と DATETIME 型の間の変換をサポートしています。これらの変換には、yyyy-mm-dd hh:mi:ss のフォーマットが使用されます。

単位

フォーマット文字列

値の範囲

yyyy

0001-9999

mm

01-12

dd

01-28|29|30|31

hh

00-23

mi

00-59

ss

00-59

説明
  • 単位の値が 1 桁の場合、先行ゼロを省略することはできません。たとえば、2014-1-9 12:12:12 は無効な DATETIME フォーマットであり、STRING 型から DATETIME 型に変換できません。2014-01-09 12:12:12 のように記述する必要があります。

  • STRING 型は、文字列が上記のフォーマットに一致する場合にのみ DATETIME 型に変換できます。たとえば、CAST("2013-12-31 02:34:34" AS DATETIME) は、STRING 型の 2013-12-31 02:34:34 を DATETIME 型に変換します。同様に、DATETIME 値が STRING 型に変換される場合、デフォルトで yyyy-mm-dd hh:mi:ss のフォーマットになります。

MaxCompute が提供する TO_DATE 関数を使用すると、デフォルトの日付フォーマットに一致しない STRING 値を DATETIME 型に変換できます。詳細については、「TO_DATE」をご参照ください。