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

MaxCompute:型変換

最終更新日:Dec 06, 2024

MaxCompute SQLを使用すると、データ型を変換できます。 明示的な変換と暗黙的な変換がサポートされています。

明示的変換

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

From/To

BIGINT

DOUBLE

STRING

DATETIME

BOOLEAN

DECIMAL

FLOAT

BIGINT

非該当

Y

Y

N

Y

Y

Y

DOUBLE

Y

非該当

Y

N

Y

Y

Y

STRING

Y

Y

非該当

Y

Y

Y

Y

DATETIME

N

N

Y

非該当

N

N

N

BOOLEAN

Y

Y

Y

N

非該当

Y

Y

DECIMAL

Y

Y

Y

N

Y

非該当

Y

フロート

Y

Y

Y

N

Y

Y

非該当

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タイプの1.6をBIGINTタイプの1に変換できます。

  • DOUBLE型の形式を満たすSTRING型の値をBIGINT型に変換すると、STRING型からDOUBLE型に変換された後、BIGINT型に変換されます。 変換中に、小数点の後の数字は削除されます。 たとえば、CAST("1.6" AS BIGINT) = 1を実行して、STRING型の1.6をBIGINT型の1に変換できます。

  • BIGINT型の形式を満たすSTRING型の値をDOUBLE型に変換すると、小数点以下1桁が保持されます。 たとえば、CAST("1" AS DOUBLE) = 1.0を実行して、STRING型の1をDOUBLE型の1.0に変換できます。

  • DATETIME型を含む変換では、デフォルトの形式yyyy-mm-dd hh:mi:ssが使用されます。

  • 特定のデータ型は明示的に変換できませんが、SQL組み込み関数を使用して変換できます。 たとえば、TO_CHAR関数を使用してBOOLEAN型をSTRING型に変換できます。 詳細については、「TO_CHAR」をご参照ください。 TO_DATE関数を使用して、STRING型をDATETIME型に変換することもできます。 詳細については、「TO_DATE」をご参照ください。

  • 値がDECIMAL型の値の範囲を超えると、CAST STRING TO DECIMALの実行中にエラーが発生する可能性があります。 例えば、最上位ビットのオーバーフローまたは最下位ビットの除去が発生し得る。

  • DECIMALタイプからDOUBLEまたはFLOATタイプへの変換は、精度の損失をもたらす。 請求額やプレミアムレートを計算する場合など、高精度が必要なシナリオでは、DECIMALタイプを保持することをお勧めします。

  • MaxComputeでは、複雑なデータ型を変換できます。 複合データ型間の暗黙的な変換は、サブタイプが暗黙的な変換をサポートする場合にのみ実装できます。 複雑なデータ型間の明示的な変換は、サブタイプが明示的な変換をサポートしている場合にのみ実装できます。 STRUCT型を変換すると、フィールド名に矛盾が生じる可能性がありますが、フィールドの数は一貫している必要があり、これらのフィールドは暗黙的または明示的な変換をサポートする必要があります。 例:

    • MaxComputeは、BIGINT型の値をSTRING型の値に暗黙的または明示的に変換できます。

    • MaxComputeは、BIGINT型の値をINT型の値に明示的に変換できます。 暗黙的な変換はサポートされていません。

    • MaxComputeは、BIGINT型の値をDATETIME型の値に暗黙的または明示的に変換できません。

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

暗黙的な変換とその適用範囲

暗黙的な変換により、MaxComputeはコンテキストと定義済みのルールに基づいてデータ型を自動的に変換できます。 次の表に、MaxComputeでサポートされている暗黙的な変換のルールを示します。

From/To

BOOLEAN

TINYINT

SMALLINT

INT

BIGINT

FLOAT

BOOLEAN

非該当

N

N

N

N

N

TINYINT

N

非該当

Y

Y

Y

Y

SMALLINT

N

N

非該当

Y

Y

Y

INT

N

N

Y

非該当

Y

Y

BIGINT

N

N

N

N

非該当

Y

FLOAT

N

N

N

N

Y

非該当

From/To

DOUBLE

DECIMAL

STRING

VARCHAR

TIMESTAMP

BINARY

DOUBLE

非該当

Y

Y

Y

N

N

DECIMAL

N

非該当

Y

Y

N

N

STRING

Y

Y

非該当

Y

N

N

VARCHAR

Y

Y

Y

非該当

非該当

非該当

TIMESTAMP

N

N

Y

Y

非該当

N

BINARY

N

N

N

N

N

非該当

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

説明
  • MaxCompute V2.0では、DECIMAL型とDATETIME型の定数を定義するメソッドが導入されています。 たとえば、100BDはDECIMALタイプの値100を示します。 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、およびINが含まれます。 LIKE、RLIKE、およびINを使用するルールは、他のリレーショナル演算子を使用するルールとは異なります。 このセクションで説明するルールは、3つの演算子には適用されません。

    次の表に、リレーショナル操作に異なる型のデータを使用する場合の暗黙的な変換の規則を示します。

    From/To

    BIGINT

    DOUBLE

    STRING

    DATETIME

    BOOLEAN

    DECIMAL

    BIGINT

    非該当

    DOUBLE

    DOUBLE

    N

    N

    DECIMAL

    DOUBLE

    DOUBLE

    非該当

    DOUBLE

    N

    N

    DECIMAL

    STRING

    DOUBLE

    DOUBLE

    非該当

    DATETIME

    N

    DECIMAL

    DATETIME

    N

    N

    DATETIME

    非該当

    N

    N

    BOOLEAN

    N

    N

    N

    N

    非該当

    N

    DECIMAL

    DECIMAL

    DECIMAL

    DECIMAL

    N

    N

    非該当

    説明
    • 比較する2つの値が暗黙の変換をサポートしていない場合、リレーショナル操作を完了できず、エラーが返されます。

    • リレーショナル演算子の詳細については、「演算子」をご参照ください。

  • 特殊なリレーショナル演算子による暗黙の変換

    特別な関係演算子には、LIKE、RLIKE、およびINが含まれます。

    • LIKEとRLIKEの構文

      source LIKE pattern;  
      source RLIKE pattern;
      説明
      • LIKEおよびRLIKEのソースおよびパターンパラメータは、STRING型でなければなりません。

      • 他の型は、操作に関与することも、暗黙的にSTRING型に変換することもできません。

    • INの構文

      key IN (value1, value2, ...)
      説明
      • inの横にある値リストのデータ型は一貫している必要があります。

      • 値のデータ型がBIGINT、DOUBLE、およびSTRINGの場合、BIGINT型およびSTRING型の値をDOUBLE型に変換します。 値のデータ型にDATETIMEとSTRINGが含まれる場合、STRING型の値をDATETIME型に変換します。 他のデータ型間の変換は許可されません。

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

    算術演算子には、+ 、-、* 、/、および % が含まれます。 これらの演算子を使用した暗黙の変換には、次の規則が適用されます。

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

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

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

    • DATETIME型およびBOOLEAN型の値は、算術演算には使用できません。

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

    論理演算子には、AND、OR、およびNOTが含まれます。 次の規則は、これらの演算子を使用した暗黙の変換に適用されます。

    • 論理演算に使用できるのはBOOLEAN型の値だけです。

    • 他の型の値は、論理演算または暗黙的に変換することはできません。

組み込み関数による暗黙の変換

MaxCompute SQLは、さまざまな組み込み関数を提供します。 これらの関数は、特定の行の1つ以上の列を計算し、特定のタイプのデータを提供するために使用できます。 これらの関数を使用した暗黙的な変換には、次のルールが適用されます。

  • 組み込み関数を呼び出したときに, 入力パラメーターのデータ型が関数に定義されているデータ型と異なる場合, 入力パラメーターのデータ型は関数定義のデータ型に変換されます。

  • MaxCompute SQLの各組み込み関数のパラメーターには、暗黙的な変換の要件が異なります。

CASE WHENによる暗黙の変換

CASE WHENの詳細については、「CASE WHEN式」をご参照ください。 CASE WHENによる暗黙的な変換には、次のルールが適用されます。

  • 戻り値がBIGINT型およびDOUBLE型の場合は, すべてDOUBLE型に変換されます。

  • 戻り値にSTRING型の戻り値が含まれる場合、すべての値がSTRING型に変換されます。 BOOLEANからSTRINGへの変換などの変換が失敗すると、エラーが返されます。

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

STRING型とDATETIME型の変換

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

時間単位

文字列 (大文字と小文字を区別しない)

有効値

yyyy

0001 - 9999

1 か月

mm

01 - 12

1 日

dd

01 - 28 | 29 | 30 | 31

1 時間

hh

00 - 23

mi

00 - 59

ss

00 - 59

説明
  • 各時間単位の値の範囲の最初の桁が0の場合、0は省略できません。 たとえば、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には、DATETIME型の形式を満たさないSTRING型をDATETIME型に変換するTO_DATE関数が用意されています。 詳細については、「TO_DATE」をご参照ください。