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

AnalyticDB:CAST関数

最終更新日:Jun 12, 2024

AnalyticDB for MySQLでは、CAST関数を使用して、あるデータ型から別のデータ型に値を変換できます。 このトピックでは、CAST関数の使用方法について説明します。

構文

CAST (expr ASタイプ)

パラメーター:

  • expr: ソースデータ。 このパラメーターを指定する必要があります。

  • type: 宛先データ型。 このパラメーターを指定する必要があります。

ブーリアンとしてのキャスト

キャスト (ブースとしてのexpr)

説明

exprで指定された値をBOOLEAN型に変換します。

ソースデータ型

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • BIGINT

  • DOUBLE

  • VARCHAR

  • JSON

変換ルール

ソースデータ型

宛先データ型

変換ルール

  • VARCHAR

  • JSON

ブーレン

  • ソース値がtrueまたは1の場合、値1が返されます。

  • ソース値がfalseまたは0の場合、値0が返されます。

  • ソース値が異なるデータ型の場合、NULLが返されます。

DOUBLE

ブーレン

  • ソース値が0.0以外の数値の場合、値1が返されます。

  • ソース値が0.0の場合、値0が返されます。

  • デシマル (m,d)

  • FLOAT

  • INT/INTEGER

  • SMALLINT

  • TINYINT

  • BIGINT

ブーレン

  • ソース値が0以外の数値の場合、値1が返されます。

  • ソース値が0の場合、0の値が返されます。

例1

次のステートメントを実行して、値1をINT型からBOOLEAN型に変換します。

セレクトキャスト (「1」としてBOOLEAN);

次の情報が返されます。

+ ---------------------- +
| CAST (BOOLEANとして '1') |
+ ---------------------- +
| 1 |
+ ---------------------- + 

例 2

次のステートメントを実行して、値aをVARCHAR型からBOOLEAN型に変換します。

セレクトキャスト (ブーリアンとして 'a');

次の情報が返されます。

NULL

例 3

次のステートメントを実行して、値4.3をDOUBLE型からBOOLEAN型に変換します。

セレクトキャスト (4.3としてBOOLEAN);

次の情報が返されます。

+ ---------------------- +
| CAST (ブーリアンとして4.3) |
+ ---------------------- +
| 1 |
+ ---------------------- + 

例 4

次のステートメントを実行して、値5をINT型からBOOLEAN型に変換します。

セレクトキャスト (5 AS BOOLEAN);

次の情報が返されます。

+ -------------------- +
| キャスト (ブーリアンとして5) |
+ -------------------- +
| 1 |
+ -------------------- + 

CAST AS DECIMAL(m,d)| FLOAT | INT | INTEGER | SMALLINT | TINYINT

CAST (expr AS [DECIMAL(m,d)| FLOAT | INT | INTEGER | SMALLINT | TINYINT])

説明

exprで指定された値をDECIMAL(M,D) 、FLOAT、INT、INTEGER、SMALLINT、またはTINYINT型に変換します。

ソースデータ型

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • BIGINT

  • DOUBLE

  • VARCHAR

  • JSON

変換ルール

  • exprで指定された値が宛先データ型の許容値の範囲内にない場合、変換中にnullが返されます。

    たとえば、次のステートメントを実行して、値99999999をBIGINT型からSMALLINT型に変換します。

    セレクトキャスト (99999999 SMALLINT);

    SMALLINT型の許容値範囲内にない99999999、NULLが返されます。

    NULL
  • 高精度データ型の値を低精度データ型に変換すると、変換後に値が丸められます。

    たとえば、次のステートメントを実行して、値1.23456789をDOUBLE型からFLOAT型に変換します。

    セレクトキャスト (1.23456789フロート);

    次の情報が返されます。

    + --------------------------- +
    | CAST (フロートとして1.23456789) |
    + --------------------------- +
    | 1.2345679 |
    + --------------------------- + 
  • DECIMAL(M,D) 、DOUBLE、またはFLOAT型の値をINT/INTEGER、SMALLINT、またはTINYINT型に変換すると、変換後に値が丸められます。

    たとえば、次のステートメントを実行して、値1.1342をFLOAT型からINT型に変換します。

    セレクトキャスト (1.1342としてINT);

    次の情報が返されます。

    + --------------------- +
    | キャスト (1.1342としてINT) |
    + --------------------- +
    | 1 |
    + --------------------- + 
  • exprで指定された値がVARCHAR型で、数値ではない場合、DECIMAL(M,D) 型またはFLOAT型に変換するとNULLが返されます。

    たとえば、次のステートメントを実行して、値ChinaをVARCHAR型からDECIMAL(M,D) 型に変換します。

    SELECTキャスト ('China' AS decimal(5,2));

    次の情報が返されます。

    NULL
  • exprで指定された値がVARCHAR型で数値ではない場合、INT/INTEGER型、SMALLINT型、またはTINYINT型に変換した後、値0が返されます。

    たとえば、次のステートメントを実行して、値ChinaをVARCHAR型からSMALLINT型に変換します。

    セレクトキャスト (「中国」AS SMALLINT);

    次の情報が返されます。

    + ---------------------------- +
    | CAST (SMALLINTとしての「中国」) |
    + ---------------------------- +
    | 0 |
    + ---------------------------- + 
  • exprで指定された値がJSON型で、数値ではない場合、値がINT/INTEGER、SMALLINT、またはTINYINT型に変換されるとエラーが返されます。

    たとえば、次のステートメントを実行して、値 [1,2,3] をVARCHAR型からJSON型に変換し、次にSMALLINT型に変換します。

    SELECT CAST(CAST('[1,2,3]' AS JSON) AS SMALLINT);

    次のエラーメッセージが返されます。

    エラー1815 (HY000): [20034、2021091814103119216818804803453190138] : jsonをsmallintにキャストできません

次のステートメントを実行して、値2001012をBIGINT型からFLOAT型に変換します。

セレクトキャスト (2001012フロート);

次の情報が返されます。

+ ------------------------- +
| CAST (フロートとして2001012) |
+ ------------------------- +
| 2001012.0 |
+ ------------------------- + 

BIGINTとしてのキャスト

キャスト (expr AS BIGINT)

説明

exprで指定された値をBIGINT型に変換します。

ソースデータ型

  • BOOLEAN

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • DOUBLE

  • 日付、日付、タイムスタンプ、または時間

  • VARCHAR

変換ルール

  • ソースVARCHAR値が数値でない場合、ソース値がBIGINT型に変換された後に値0が返されます。

    たとえば、次のステートメントを実行して、値aをVARCHAR型からBIGINT型に変換します。

    セレクトキャスト ('a' AS BIGINT);

    次の情報が返されます。

    + --------------------- +
    | CAST('a' AS BIGINT) |
    + --------------------- +
    | 0 |
    + --------------------- + 
  • FLOAT、DOUBLE、またはDECIMAL(M,D) 型の値をBIGINT型に変換すると、変換後にデータが丸められます。

    たとえば、次のステートメントを実行して、値1.23456789をDOUBLE型からBIGINT型に変換します。

    セレクトキャスト (1.23456789としてBIGINT);

    次の情報が返されます。

    + ---------------------------- +
    | CAST(1.23456789 AS BIGINT) |
    + ---------------------------- +
    | 1 |
    + ---------------------------- + 
  • ソースJSON値が数値でない場合、ソース値がBIGINT型に変換されるとNULLが返されます。

    たとえば、次のステートメントを実行して、値 {} をJSON型からBIGINT型に変換します。

    セレクトキャスト (JSON'{}'AS BIGINT);

    次の情報が返されます。

    NULL

  • 次のステートメントを実行して、値2021-09-18をDATE型からBIGINT型に変換します。

    セレクトキャスト (DATE '2021-09-18' AS BIGINT);

    次の情報が返されます。

    + ----------------------------------- +
    | キャスト (DATE '2021-09-18 'AS BIGINT) |
    + ----------------------------------- +
    | 20210918 |
    + ----------------------------------- + 
  • 次のステートメントを実行して、値 -1をJSON型からBIGINT型に変換します。

    SELECT CAST(JSON '-1' AS BIGINT);

    次の情報が返されます。

    + --------------------------- +
    | CAST(JSON '-1' AS BIGINT) |
    + --------------------------- +
    | -1 |
    + --------------------------- + 
  • 次のステートメントを実行して、値FLOOR(4/5) をDOUBLE型からBIGINT型に変換します。

    SELECT CAST (床 (4/5) としてBIGINT);

    次の情報が返されます。

    + --------------------------- +
    | CAST (フロア (4/5) as BIGINT) |
    + --------------------------- +
    | 0 |
    + --------------------------- + 

ダブルキャスト

キャスト (ダブルとしてexpr)

説明

exprで指定された値をDOUBLE型に変換します。

ソースデータ型

  • BOOLEAN

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • BIGINT

  • 日付、日付、タイムスタンプ、または時間

  • VARCHAR

  • JSON

変換ルール

  • ソースVARCHAR値が数値でない場合、ソース値がDOUBLE型に変換された後、0.0の値が返されます。

    たとえば、次のステートメントを実行して、値ChinaをVARCHAR型からDOUBLE型に変換します。

    セレクトキャスト (「中国」はダブル);

    次の情報が返されます。

    + -------------------------- +
    | キャスト (ダブルとして「中国」) |
    + -------------------------- +
    | 0.0 |
    + -------------------------- + 
  • ソースJSON値が数値でない場合、ソース値がDOUBLE型に変換されるとNULLが返されます。

    たとえば、次のステートメントを実行して、値 {} をJSON型からDOUBLE型に変換します。

    SELECT CAST(JSON '{}' AS DOUBLE);

    次の情報が返されます。

    NULL

次のステートメントを実行して、値2021-09-17をDATE型からDOUBLE型に変換します。

セレクトキャスト (DATE '2021-09-17 'AS DOUBLE);

次の情報が返されます。

+ ------------------------------------ +
| キャスト (DATE '2021-09-17 'AS DOUBLE) |
+ ------------------------------------ +
| 2.0210917E7 |
+ ------------------------------------ + 

日付としてのキャスト | 日付 | タイムスタンプ | 時間

キャスト (expr AS DATE | DATETIME | TIMESTAMP | TIME)

説明

exprで指定された値をDATE、DATETIME、TIMESTAMP、またはTIME型に変換します。

ソースデータ型

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • BIGINT

  • DOUBLE

  • 日付、日付、タイムスタンプ、または時間

  • VARCHAR

  • JSON

変換ルール

  • ソースVARCHARまたはBIGINT値がTIME形式に準拠していない場合、変換後にNULLが返されます。

    たとえば、次のステートメントを実行して、値aをVARCHAR型からTIME型に変換します。

    セレクトキャスト ('a' AS TIME);

    ソース値がTIME形式に準拠していないため、次の結果に示すようにNULL値が返されます。

    + ------------------- +
    | キャスト ('a' AS TIME) |
    + ------------------- +
    | NULL |
    + ------------------- + 
  • 宛先データ型に時刻と日付が含まれているが、対応する情報がソースデータに含まれていない場合、次の規則が適用されます。

    • デフォルトでは、exprで指定された値に時刻が含まれていない場合、変換後に00:00:00の値が返されます。

      たとえば、次のステートメントを実行して、2001-1-22の値をTIMESTAMP型からTIME型に変換します。

      セレクトキャスト (TIMESTAMP '2001-1-22 'AS TIME);

      次の結果に示すように、00:00:00の値が返されます。 これは、ソースデータに時刻が含まれていないためである。

      + ------------------------------------- +
      | キャスト (タイムスタンプ '2001-1-22 'AS TIME) |
      + ------------------------------------- +
      | 00:00:00 |
      + ------------------------------------- + 
    • デフォルトでは、exprで指定された値に日付が含まれていない場合、クライアントでクエリが実行されたときのシステム日付が変換後に返されます。

      たとえば、次のステートメントを実行して、値00:00:00をTIME型からDATE型に変換します。

      セレクトキャスト (時間 '00:00:00 '日付として);

      次の結果に示すように、クエリが実行されたシステム日付が返されます。 これは、ソースデータに日付が含まれていないためです。

      + ------------------------------- +
      | CAST(TIME '00:00:00 'AS DATE) |
      + ------------------------------- +
      | 2021-09-14 |
      + ------------------------------- + 

次のステートメントを実行して、値20010122000000をBIGINT型からDATE型に変換します。

セレクトキャスト (日付として20010122000000);

次の情報が返されます。

+ ------------------------------ +
| CAST (日付として20010122000000) |
+ ------------------------------ +
| 2001-01-22 |
+ ------------------------------ + 

VARBINARYとしてキャスト

キャスト (expr AS VARBINARY)

説明

exprで指定された値をVARBINARY型に変換します。

ソースデータ型

  • BOOLEAN

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • BIGINT

  • DOUBLE

  • 日付、日付、タイムスタンプ、または時間

  • VARCHAR

  • JSON

次のステートメントを実行して、値CHINAをVARCHAR型からVARBINARY型に変換します。

セレクトキャスト (キャスト ('CHINA' AS VARBINARY) AS VARCHAR);

次の情報が返されます。

+ -------------------------------------------------------- +
| CAST(CAST (VARBINARYとしての「CHINA」) AS VARCHAR) |
+ -------------------------------------------------------- +
| 中国 |
+ -------------------------------------------------------- + 

VARCHARとしてのキャスト

キャスト (VARCHARとしてexpr)

説明

exprで指定された値をVARCHAR型に変換します。

ソースデータ型

  • BOOLEAN

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • BIGINT

  • DOUBLE

  • 日付、日付、タイムスタンプ、または時間

  • VARBINARY

    説明

    V3.1.4以降のAnalyticDB for MySQLクラスターのみが、CAST関数を使用してVARBINARY型からVARCHAR型にデータを変換できます。

  • MAP

  • JSON

次のステートメントを実行して、値2001-1-22 00:00:00をTIMESTAMP型からVARCHAR型に変換します。

セレクトキャスト (TIMESTAMP '2001-1-22 00:00:00 'AS VARCHAR);

次の情報が返されます。

+ ------------------------------------------------- +
| キャスト (タイムスタンプ '2001-1-22 00:00:00 'AS VARCHAR) |
+ ------------------------------------------------- +
| 2001-01-22 00:00:00 |
+ ------------------------------------------------- + 

アレイとしてのキャスト

キャスト (expr AS ARRAY<element_type>)

説明

exprで指定された値を、<element_type> 型の配列に変換します。

ソースデータ型

  • expr: VARCHARまたはJSON。

  • <element_type>: TINYINT、SMALLINT、INT/INTEGER、またはFLOAT。

変換ルール

ソースVARCHARまたはJSON値がARRAY形式に準拠していない場合、変換中にエラーが返されます。

たとえば、次のステートメントを実行して、VARCHAR値 {}} をFLOAT型要素の配列に変換します。

SELECT CAST('{}}' AS ARRAY<float>);

ソース値がARRAY形式に準拠していないため、次のエラーメッセージが返されます。

エラー1815 (HY000): [30013, 2021091815372119216818804803453204662] : 値は配列にキャストできません (リアル)

次のステートメントを実行して、JSON値 [1,2,3] をINT型要素の配列に変換します。

SELECT CAST( JSON '[1,2,3]' AS ARRAY<int>);

次の情報が返されます。

+ ------------------------------------- +
| CAST( JSON '[1,2,3]' AS ARRAY<int> |
+ ------------------------------------- +
| [1,2,3] |
+ ------------------------------------- + 

マップとしてのキャスト

キャスト (expr AS MAP<element_type_1,element_type_2>)

説明

exprで指定された値を、<element_type_1> 型を <element_type_2> 型にマップするマップに変換します。

ソースデータ型

  • expr: VARCHAR。

  • <element_type_1>: BOOLEAN、DECIMAL、DOUBLE、FLOAT、BIGINT、INT/INTEGER、SMALLINT、TINYINT、またはVARCHAR。

  • <element_type_2>: BOOLEAN、DECIMAL、DOUBLE、FLOAT、BIGINT、INT/INTEGER、SMALLINT、TINYINT、VARCHAR、ARRAY、JSON、またはMAP。

変換ルール

ソースVARCHAR値がMAP形式に準拠していない場合、変換中にエラーが返されます。

たとえば、次のステートメントを実行して、VARCHAR値 [a,b,c] をMAP型に変換します。

SELECT CAST('[a,b,c]' AS MAP<varchar,varchar>);

次のエラーメッセージが返されます。

エラー1815 (HY000): [30013, 2021091815562519216818804803453207833] : 値はマップにキャストできません (varchar,varchar)

次のステートメントを実行して、VARCHAR値 {"1":"a"} を、VARCHAR要素をVARCHAR型にマップするマップに変換します。

SELECT CAST('{"1":"a"}' AS MAP<varchar,varchar>);

次の情報が返されます。

+ ------------------------------------------- +
| CAST('{"1":"a"}' AS MAP<varchar,varchar>) |
+ ------------------------------------------- +
| {"1":"a"} |
+ ------------------------------------------- + 

CAST AS JSON

CAST (expr AS JSON)

説明

exprで指定された値をJSON型に変換します。

ソースデータ型

  • BOOLEAN

  • デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT

  • BIGINT

  • DOUBLE

  • VARCHAR

  • ARRAY

変換ルール

ソースVARCHAR値がJSON形式に準拠していない場合、変換後にNULLが返されます。

たとえば、次のステートメントを実行して、値 {}} をVARCHAR型からJSON型に変換します。

SELECT CAST('{}}' AS JSON);

次の情報が返されます。

NULL

  • 次のステートメントを実行して、値 {} をVARCHAR型からJSON型に変換します。

    SELECT CAST('{}' AS JSON);

    次の情報が返されます。

    + -------------------- +
    | CAST('{}' AS JSON) |
    + -------------------- +
    | {} |
    + -------------------- + 
  • 次のステートメントを実行して、値0をBIGINT型からJSON型に変換します。

    SELECT CAST (JSONとしてBIGINT '0');

    次の情報が返されます。

    + --------------------------- +
    | キャスト (JSONとしてBIGINT '0') |
    + --------------------------- +
    | 0 |
    + --------------------------- +