AnalyticDB for MySQLでは、CAST
関数を使用して、あるデータ型から別のデータ型に値を変換できます。 このトピックでは、CAST
関数の使用方法について説明します。
構文
CAST (expr ASタイプ)
パラメーター:
expr
: ソースデータ。 このパラメーターを指定する必要があります。type
: 宛先データ型。 このパラメーターを指定する必要があります。
ブーリアンとしてのキャスト
キャスト (ブースとしてのexpr)
説明
expr
で指定された値をBOOLEAN型に変換します。
ソースデータ型
デシマル (M、D) 、フロート、INT/INTEGER、SMALLINT、またはTINYINT
BIGINT
DOUBLE
VARCHAR
JSON
変換ルール
ソースデータ型 | 宛先データ型 | 変換ルール |
| ブーレン |
|
DOUBLE | ブーレン |
|
| ブーレン |
|
例
例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 | + --------------------------- +