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

AnalyticDB:CAST 関数

最終更新日:Mar 29, 2026

AnalyticDB for MySQL では、CAST を使用して、あるデータ型の値を別のデータ型に変換します。

構文

CAST(expr AS type)
パラメーター必須説明
exprはい変換するソース値または式。
typeはい変換先のデータ型。

サポートされる変換

次の表に、CAST でサポートされる変換先の型と、それぞれが受け入れるソースの型を示します。

宛先タイプ受け入れ可能なソースの型
BOOLEANDECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINT、DOUBLE、VARCHAR、JSON
DECIMAL(M,D)、FLOAT、INT、INTEGER、SMALLINT、TINYINTDECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINT、DOUBLE、VARCHAR、JSON
BIGINTBOOLEAN、DECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、DOUBLE、DATE、DATETIME、TIMESTAMP、TIME、VARCHAR
DOUBLEBOOLEAN、DECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINT、DATE、DATETIME、TIMESTAMP、TIME、VARCHAR、JSON
DATE、DATETIME、TIMESTAMP、TIMEDECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINT、DOUBLE、DATE、DATETIME、TIMESTAMP、TIME、VARCHAR、JSON
VARBINARYBOOLEAN、DECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINT、DOUBLE、DATE、DATETIME、TIMESTAMP、TIME、VARCHAR、JSON
VARCHARBOOLEAN、DECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINT、DOUBLE、DATE、DATETIME、TIMESTAMP、TIME、VARBINARY、MAP、JSON
ARRAY\<element_type\>VARCHAR、JSON
MAP\<key_type, value_type\>VARCHAR
JSONBOOLEAN、DECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINT、DOUBLE、VARCHAR、ARRAY
VARBINARY から VARCHAR への変換には、AnalyticDB for MySQL V3.1.4 以降が必要です。

変換失敗時の動作

変換が失敗した場合の結果は、ソースの型と変換先の型によって異なります。

シナリオ結果
VARCHAR または BIGINT の値が TIME 形式と一致しないNULL
範囲外の値が数値型 (INT グループを除く) にキャストされるNULL
非数値の VARCHAR が DECIMAL(M,D) または FLOAT にキャストされるNULL
数値ではない JSON が BIGINT または DOUBLE にキャストされるNULL
JSON 形式ではない VARCHAR が JSON にキャストされるNULL
範囲外の値が INT/INTEGER、SMALLINT、または TINYINT にキャストされるNULL
非数値の VARCHAR が INT/INTEGER、SMALLINT、または TINYINT にキャストされる0
数値ではない JSON が INT/INTEGER、SMALLINT、または TINYINT にキャストされるエラー
ARRAY 形式ではない値が ARRAY にキャストされるエラー
MAP 形式ではない値が MAP にキャストされるエラー

CAST AS BOOLEAN

CAST(expr AS BOOLEAN)

expr を BOOLEAN に変換します。結果は常に 1 (true) または 0 (false) になります。

変換ルール

ソースの型ルール
VARCHAR、JSONtrue または 11false または 00、その他のすべての値 → NULL
DOUBLE0.0 以外 → 10.00
DECIMAL(M,D)、FLOAT、INT/INTEGER、SMALLINT、TINYINT、BIGINTゼロ以外 → 100

-- VARCHAR '1' を BOOLEAN にキャスト
SELECT CAST('1' AS BOOLEAN);
+----------------------+
| CAST('1' AS BOOLEAN) |
+----------------------+
|                    1 |
+----------------------+
-- ブール値以外の文字列は NULL を返す
SELECT CAST('a' AS BOOLEAN);
NULL
-- ゼロ以外の DOUBLE は 1 を返す
SELECT CAST(4.3 AS BOOLEAN);
+----------------------+
| CAST(4.3 AS BOOLEAN) |
+----------------------+
|                    1 |
+----------------------+
-- ゼロ以外の INT は 1 を返す
SELECT CAST(5 AS BOOLEAN);
+--------------------+
| CAST(5 AS BOOLEAN) |
+--------------------+
|                  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) のいずれかに変換します。

変換ルール

  • 範囲外の値は NULL を返します。たとえば、99999999 は SMALLINT の範囲を超えています:

    SELECT CAST(99999999 AS SMALLINT);
    NULL
  • 高精度から低精度への変換では、値が四捨五入されます:

    SELECT CAST(1.23456789 AS FLOAT);
    +---------------------------+
    | CAST(1.23456789 AS FLOAT) |
    +---------------------------+
    |                 1.2345679 |
    +---------------------------+
  • DECIMAL(M,D)、DOUBLE、または FLOAT から INT/INTEGER、SMALLINT、または TINYINT への変換では、値が四捨五入されます:

    SELECT CAST(1.1342 AS INT);
    +---------------------+
    | CAST(1.1342 AS INT) |
    +---------------------+
    |                   1 |
    +---------------------+
  • 非数値の VARCHAR から DECIMAL(M,D) または FLOAT への変換では、NULL が返されます:

    SELECT CAST('China' AS DECIMAL(5,2));
    NULL
  • 非数値の VARCHAR から INT/INTEGER、SMALLINT、または TINYINT への変換では、0 が返されます:

    SELECT CAST('China' AS SMALLINT);
    +---------------------------+
    | CAST('China' AS SMALLINT) |
    +---------------------------+
    |                         0 |
    +---------------------------+
  • 数値ではない JSON から INT/INTEGER、SMALLINT、または TINYINT への変換では、エラーが返されます:

    SELECT CAST(CAST('[1,2,3]' AS JSON) AS SMALLINT);
    ERROR 1815 (HY000): [20034, 2021091814103119216818804803453190138] : Cannot cast json to smallint

SELECT CAST(2001012 AS FLOAT);
+------------------------+
| CAST(2001012 AS FLOAT) |
+------------------------+
|               2001012.0|
+------------------------+

CAST AS BIGINT

CAST(expr AS BIGINT)

expr を BIGINT 型に変換します。

変換ルール

  • 非数値の VARCHAR0 を返します:

    SELECT CAST('a' AS BIGINT);
    +---------------------+
    | CAST('a' AS BIGINT) |
    +---------------------+
    |                   0 |
    +---------------------+
  • FLOAT、DOUBLE、または DECIMAL(M,D) の値は四捨五入されます:

    SELECT CAST(1.23456789 AS BIGINT);
    +----------------------------+
    | CAST(1.23456789 AS BIGINT) |
    +----------------------------+
    |                          1 |
    +----------------------------+
  • 数値ではない JSON は NULL を返します:

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

-- DATE から BIGINT へ:日付を YYYYMMDD 形式の整数として返す
SELECT CAST(DATE '2021-09-18' AS BIGINT);
+-----------------------------------+
| CAST(DATE '2021-09-18' AS BIGINT) |
+-----------------------------------+
|                          20210918 |
+-----------------------------------+
-- JSON の数値を BIGINT に変換
SELECT CAST(JSON '-1' AS BIGINT);
+---------------------------+
| CAST(JSON '-1' AS BIGINT) |
+---------------------------+
|                        -1 |
+---------------------------+
-- 式の結果を BIGINT に変換
SELECT CAST(FLOOR(4/5) AS BIGINT);
+----------------------------+
| CAST(FLOOR(4/5) AS BIGINT) |
+----------------------------+
|                          0 |
+----------------------------+

CAST AS DOUBLE

CAST(expr AS DOUBLE)

expr を DOUBLE 型に変換します。

変換ルール

  • 非数値の VARCHAR0.0 を返します:

    SELECT CAST('China' AS DOUBLE);
    +--------------------------+
    | CAST('China' AS DOUBLE)  |
    +--------------------------+
    |                      0.0 |
    +--------------------------+
  • 数値ではない JSON は NULL を返します:

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

-- DATE から DOUBLE へ:日付を浮動小数点数として返す
SELECT CAST(DATE '2021-09-17' AS DOUBLE);
+------------------------------------+
| CAST(DATE '2021-09-17' AS DOUBLE)  |
+------------------------------------+
|                        2.0210917E7 |
+------------------------------------+

CAST AS DATE|DATETIME|TIMESTAMP|TIME

CAST(expr AS DATE|DATETIME|TIMESTAMP|TIME)

expr を DATE、DATETIME、TIMESTAMP、または TIME に変換します。

変換ルール

  • TIME 形式と一致しない VARCHAR または BIGINT は NULL を返します:

    SELECT CAST('a' AS TIME);
    +-------------------+
    | CAST('a' AS TIME) |
    +-------------------+
    | NULL              |
    +-------------------+
  • 時間コンポーネントがない場合は、デフォルトで 00:00:00 になります:

    SELECT CAST(TIMESTAMP '2001-1-22' AS TIME);
    +-------------------------------------+
    | CAST(TIMESTAMP '2001-1-22' AS TIME) |
    +-------------------------------------+
    | 00:00:00                            |
    +-------------------------------------+
  • 日付コンポーネントがない場合は、クエリ実行時のシステム日付がデフォルトになります:

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

-- BIGINT から DATE へ
SELECT CAST(20010122000000 AS DATE);
+------------------------------+
| CAST(20010122000000 AS DATE) |
+------------------------------+
| 2001-01-22                   |
+------------------------------+

CAST AS VARBINARY

CAST(expr AS VARBINARY)

expr を VARBINARY 型に変換します。結果を文字列として読み取るには、別の CAST で VARCHAR に変換します。

SELECT CAST(CAST('CHINA' AS VARBINARY) AS VARCHAR);
+---------------------------------------------+
| CAST(CAST('CHINA' AS VARBINARY) AS VARCHAR) |
+---------------------------------------------+
| CHINA                                       |
+---------------------------------------------+

CAST AS VARCHAR

CAST(expr AS VARCHAR)

expr を VARCHAR 型に変換します。

VARBINARY から VARCHAR への変換には、AnalyticDB for MySQL V3.1.4 以降が必要です。

SELECT CAST(TIMESTAMP '2001-1-22 00:00:00' AS VARCHAR);
+-------------------------------------------------+
| CAST(TIMESTAMP '2001-1-22 00:00:00' AS VARCHAR) |
+-------------------------------------------------+
| 2001-01-22 00:00:00                             |
+-------------------------------------------------+

CAST AS ARRAY

CAST(expr AS ARRAY<element_type>)

expr を、要素が element_type の配列に変換します。

パラメーター受け入れ可能な値
exprVARCHAR、JSON
element_typeTINYINT、SMALLINT、INT/INTEGER、FLOAT

変換ルール

expr が ARRAY 形式に準拠していない場合、エラーが返されます:

SELECT CAST('{}}' AS ARRAY<float>);
ERROR 1815 (HY000): [30013, 2021091815372119216818804803453204662] : Value cannot be cast to array(real)

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

CAST AS MAP

CAST(expr AS MAP<key_type, value_type>)

VARCHAR 値を key_type から value_type へのマップに変換します。

パラメーター受け入れ可能な値
exprVARCHAR
key_typeBOOLEAN、DECIMAL、DOUBLE、FLOAT、BIGINT、INT/INTEGER、SMALLINT、TINYINT、VARCHAR
value_typeBOOLEAN、DECIMAL、DOUBLE、FLOAT、BIGINT、INT/INTEGER、SMALLINT、TINYINT、VARCHAR、ARRAY、JSON、MAP

変換ルール

expr が MAP 形式に準拠していない場合、エラーが返されます:

SELECT CAST('[a,b,c]' AS MAP<varchar,varchar>);
ERROR 1815 (HY000): [30013, 2021091815562519216818804803453207833] : Value cannot be cast to map(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 型に変換します。

変換ルール

expr が JSON 形式に準拠していない VARCHAR の場合、NULL が返されます:

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

-- VARCHAR から JSON へ
SELECT CAST('{}' AS JSON);
+--------------------+
| CAST('{}' AS JSON) |
+--------------------+
| {}                 |
+--------------------+
-- BIGINT から JSON へ
SELECT CAST(BIGINT '0' AS JSON);
+--------------------------+
| CAST(BIGINT '0' AS JSON) |
+--------------------------+
| 0                        |
+--------------------------+