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

MaxCompute:型変換

最終更新日:Mar 26, 2026

MaxCompute SQL は、CAST 関数を使用した明示的な型変換と、コンテキストに基づいて MaxCompute が自動的に型を変換する暗黙の型変換という 2 種類の型変換をサポートしています。

明示的な型変換

CAST 関数は、あるデータの型の値を別のデータの型に変換します。構文の詳細については、「CAST」をご参照ください。

次の表は、サポートされている明示的な型変換を示しています。Y = サポート対象、N = サポート対象外、N/A = 該当なしです。

From\ToBIGINTDOUBLESTRINGDATETIMEBOOLEANDECIMALFLOAT
BIGINTN/AYYNYYY
DOUBLEYN/AYNYYY
STRINGYYN/AYYYY
DATETIMENNYN/ANNN
BOOLEANYYYNN/AYY
DECIMALYYYNYN/AY
FLOATYYYNYYN/A

サポートされていない変換を実行しようとすると、エラーが返されます。

変換動作と制限事項

数値型の変換

変換動作
DOUBLE → BIGINT小数点以下が四捨五入されず切り捨てられますCAST(1.6 AS BIGINT)1
STRING (DOUBLE 形式) → BIGINTSTRING → DOUBLE → BIGINT の順で変換され、小数点以下が切り捨てられますCAST('1.6' AS BIGINT)1
STRING (BIGINT 形式) → DOUBLE小数点以下 1 桁が付加されますCAST('1' AS DOUBLE)1.0

DATETIME 型の変換

DATETIME を含む変換では、フォーマット yyyy-mm-dd hh:mi:ss を使用します。先頭のゼロが必要です。2014-01-09 12:12:12 は有効ですが、2014-1-9 12:12:12 は無効です。

DECIMAL 型の変換

  • STRING を DECIMAL にキャストする際、値が DECIMAL の範囲を超える場合(たとえば最上位桁がオーバーフローする場合や最下位桁が切り捨てられる場合)はエラーが返されます。

  • DECIMAL を DOUBLE または FLOAT にキャストすると精度が失われます。請求金額や保険料率などの金融計算では、値を DECIMAL のまま保持してください。

CAST でサポートされていない変換

一部の型ペアは CAST で変換できませんが、ビルトイン関数で処理できます。

変換代替関数
BOOLEAN → STRINGTO_CHAR
STRING (非標準フォーマット) → DATETIMETO_DATE

複合型の変換

複合型(ARRAY、STRUCT)間の変換は、その要素型またはフィールドの変換ルールに従います。

  • 複合型間の暗黙の変換は、サブタイプが暗黙の変換をサポートしている場合にのみ可能です。

  • 複合型間の明示的な変換は、サブタイプが明示的な変換をサポートしている場合にのみ可能です。

  • STRUCT 型の場合、フィールド名は異なっても構いませんが、フィールド数は一致し、各フィールドペアが必要な変換をサポートしている必要があります。

変換暗黙明示的
BIGINT → STRINGYY
BIGINT → INTNY
BIGINT → DATETIMENN
STRUCT<a:BIGINT, b:INT>STRUCT<col1:STRING, col2:BIGINT>YY
STRUCT<a:BIGINT, b:INT>STRUCT<col1:STRING> (フィールド数不一致)NN

説明

以下の例では user テーブルを使用します。テーブルを作成してサンプルデータを挿入するには、次のコマンドを実行します。

CREATE TABLE IF NOT EXISTS user (
  user_name STRING,
  user_id   BIGINT,
  age       BIGINT
);
INSERT INTO user VALUES ('zhangsan', 111, 20);
-- BIGINT 列を DOUBLE にキャスト
SELECT CAST(user_id AS DOUBLE) AS new_id FROM user;

-- 文字列リテラルを DATETIME にキャスト
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>));

暗黙の型変換

MaxCompute は、コンテキストに基づいてデータの型を自動的に変換します。次の表は、サポートされている暗黙の型変換を示しています。Y = サポート対象、N = サポート対象外、N/A = 該当なしです。

整数型および浮動小数点型

From\ToBOOLEANTINYINTSMALLINTINTBIGINTFLOAT
BOOLEANYNNNNN
TINYINTNYYYYY
SMALLINTNNYYYY
INTNNYYYY
BIGINTNNNNYY
FLOATNNNNYY

10 進数型および文字列型

From\ToDOUBLEDECIMALSTRINGVARCHARTIMESTAMPBINARY
DOUBLEYYYYNN
DECIMALNYYYNN
STRINGYYYYNN
VARCHARYYNNN/AN/A
TIMESTAMPNNYYYN
BINARYNNNNNY

サポートされていない暗黙の型変換を実行しようとしたり、ランタイムで変換に失敗したりすると、エラーが返されます。

説明
  • MaxCompute V2.0 では、DECIMAL および DATETIME の型付き定数が導入されました。たとえば、100BD は値 100 の DECIMAL 定数であり、2017-11-11 00:00:00 は DATETIME 定数です。これらの定数は、VALUES 句やテーブルで直接使用できます。

  • 式内で型が一致しない場合は、暗黙の変換に依存せずに CAST を使用して明示的に変換してください。

  • 暗黙の変換ルールは特定のコンテキストに適用されます。状況によっては、ルールの一部のみが有効になることがあります。

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

このクエリでは、'12345' は算術式のために DOUBLE に暗黙的に変換され、user_id および ageCONCAT のために STRING に暗黙的に変換されます。

関係演算子による暗黙の変換

関係演算子には、=<><<=>>=IS NULL、および IS NOT NULL が含まれます。次の表は、MaxCompute が関係比較における型の不一致をどのように解決するかを示しています。セルの値は、両方のオペランドが変換される型です。

From\ToBIGINTDOUBLESTRINGDATETIMEBOOLEANDECIMAL
BIGINTN/ADOUBLEDOUBLENNDECIMAL
DOUBLEDOUBLEN/ADOUBLENNDECIMAL
STRINGDOUBLEDOUBLEN/ADATETIMENDECIMAL
DATETIMENNDATETIMEN/ANN
BOOLEANNNNNN/AN
DECIMALDECIMALDECIMALDECIMALNNN/A

2 つのオペランドが暗黙の変換をサポートしていない場合、比較はエラーで失敗します。関係演算子の詳細については、「Operators」をご参照ください。

LIKE、RLIKE、IN による暗黙の変換

LIKERLIKE、および IN は、他の関係演算子とは異なるルールに従います。

LIKE および RLIKE

source LIKE pattern;
source RLIKE pattern;

source および pattern はどちらも STRING である必要があります。他の型は使用できず、STRING に暗黙的に変換されることもありません。

IN

key IN (value1, value2, ...)

リスト内のすべての値は同じ型である必要があります。リストに複数の型が混在している場合、MaxCompute は次の変換を適用します。

  • リストに BIGINT、DOUBLE、および STRING 値が含まれている場合、BIGINT および STRING は DOUBLE に変換されます。

  • リストに DATETIME および STRING 値が含まれている場合、STRING は DATETIME に変換されます。

  • その他の型の組み合わせはサポートされていません。

算術演算子による暗黙の変換

算術演算子には、+-*/、および % が含まれます。

  • 算術式では、BIGINT、DOUBLE、DECIMAL、および STRING 値のみを使用できます。

  • STRING は操作前に DOUBLE に暗黙的に変換されます。

  • BIGINT および DOUBLE が同じ式に含まれる場合、BIGINT は DOUBLE に変換されます。

  • DATETIME および BOOLEAN は算術式で使用できません。

論理演算子による暗黙の変換

論理演算子には、ANDOR、および NOT が含まれます。論理式では BOOLEAN 値のみを使用できます。他の型は暗黙的に変換されません。

ビルトイン関数による暗黙の変換

ビルトイン関数が、期待されるパラメーター型と異なる型の引数を受け取った場合、MaxCompute はその引数を期待される型に暗黙的に変換します。各ビルトイン関数は、独自の暗黙の変換要件を定義しています。

CASE WHEN による暗黙の変換

CASE WHEN の詳細については、「CASE WHEN expression」をご参照ください。

THEN および ELSE ブランチが異なる型を返す場合、MaxCompute は次のように解決します。

  • BIGINT および DOUBLE → すべてのブランチが DOUBLE に変換されます。

  • いずれかのブランチが STRING を返す → すべてのブランチが STRING に変換されます。ブランチが変換できない場合(たとえば BOOLEAN から STRING)、エラーが返されます。

  • その他の型の組み合わせはサポートされていません。

STRING と DATETIME 間の変換

STRING と DATETIME 間の変換では、フォーマット yyyy-mm-dd hh:mi:ss を使用します。各コンポーネントの有効値は次のとおりです。

項目形式有効値
yyyy0001–9999
mm01–12
dd01–28/29/30/31
hh00–23
mi00–59
ss00–59

先頭のゼロが必要です。たとえば、2014-1-9 12:12:12 は無効です。2014-01-09 12:12:12 と記述してください。

-- 有効:文字列を DATETIME にキャスト
SELECT CAST('2013-12-31 02:34:34' AS DATETIME);

-- DATETIME を STRING に変換すると、自動的に yyyy-mm-dd hh:mi:ss フォーマットになります

このフォーマットに従っていない STRING を変換するには、TO_DATE を使用してください。

次の変換試行は失敗し、例外が発生します。

CAST("2013/12/31 02/34/34" AS DATETIME)  
CAST("20131231023434" AS DATETIME)  
CAST("2013-12-31 2:34:34" AS DATETIME)

日コンポーネントの最大値は、指定された月の実際の日数に依存します。その月の日数を超える値を指定すると、例外が発生します。

CAST("2013-02-29 12:12:12" AS DATETIME)      -- 例外が返されます。2013 年 2 月には 29 日がありません。
CAST("2013-11-31 12:12:12" AS DATETIME)      -- 例外が返されます。2013 年 11 月には 31 日がありません。