宣言
CAST(expr AS type)
説明
CAST()は、あるデータ型の式を別のデータ型に明示的に変換します。つまり、exprフィールドの値をtypeデータ型に変換します。
パラメータの説明
パラメータの説明は以下のとおりです:
expr:任意の有効なSQL式を表します。AS:2つのパラメータを区切るために使用されます。ASの前が処理対象のデータ、ASの後が変換後のデータ型です。type:ターゲットシステムが提供するデータ型を表します。サポートされている型は以下のとおりです:CHAR[(N)] [CHARACTER SET charset_name]CHARデータ型の文字列を生成します。式exprが空(長さ0)の場合を除き、結果型はCHAR(0)です。オプションの長さNを指定した場合、CHAR(N)はN個の文字を超えないよう強制的に変換します。Nより短い値は補完されません。オプションの長さNを指定しない場合、OceanBaseデータベースは式から最大長を計算します。CHARACTER SET charset_name句がない場合、CHARはデフォルトの文字セットを持つ文字列を生成します。DATE:DATE値を生成します。DATETIME [ (M) ]:DATETIME値を生成します。M値はオプションで、小数点以下の秒の精度を指定するために使用されます。範囲は [0,6] です。DECIMAL [ (M [,D] ) ]:DECIMAL値を生成します。MとD値はオプションで、それぞれ最大桁数(精度)と小数点以下の桁数(小数部の桁数)を指定します。Mの最大値は65、Dの最大値は30です。Dを省略した場合、デフォルトは0です。Mを省略した場合、デフォルトは10です。SIGNED [INTEGER]:符号付きBIGINT値を生成します。JSON:JSON値を生成します。JSONと他の型への変換ルールについては、JSONデータ型の変換を参照してください。TIME [ (M) ]:TIME値を生成します。オプションの M 値が指定された場合、小数点以下の秒の精度を指定します。UNSIGNED [INTEGER]:符号なしBIGINT値を生成します。DECIMAL(m,d):固定小数点数型で、mは総桁数、dは小数点以下の桁数を表します。FLOAT:単精度浮動小数点数を表し、近似値に適しています。BIGINT:式exprの値を明示的にBIGINT型に変換するために使用されます。説明
V4.4.2バージョンでは、V4.4.2 BP1バージョンから
BIGINT型への変換がサポートされています。INTまたはINTEGER:32ビット符号付き整数を表します。SMALLINT:16ビット符号付き整数を表します。TINYINT:8ビット符号付き整数を表します。ARRAY:JSON配列の要素を特定の型の配列に変換するために使用されます。ARRAY<要素型>形式で配列要素型を宣言でき、ARRAY<ARRAY<INT>>のようなネスト配列もサポートしており、多次元配列構造を表すことができます。
使用方法
CAST 関数を使用してデータ型を変換する場合、以下のケースがサポートされます:
2つの式のデータ型が完全に同じである場合
2つの式が暗黙的に変換可能な場合
データ型を明示的に変換する必要がある場合
式 expr の値が対象データ型の値の範囲を超える場合、型変換は
nullを返します。高精度データ型から低精度データ型への変換では、精度が失われます。
固定小数点数(
DECIMAL(m,d))、浮動小数点数(DOUBLE、FLOAT)を整数(INT/INTEGER、SMALLINTまたはTINYINT)に変換すると、精度が失われます。式 expr が
VARCHAR型であり、かつ数値でない場合、INT/INTEGER、SMALLINTまたはTINYINT型に変換すると、結果は0になります。式 expr が JSON 型であり、かつ数値でない場合、
INT/INTEGER、SMALLINTまたはTINYINT型に変換すると、エラーが返されます。VARCHARデータまたはJSONデータがARRAY形式に適合しない場合、変換時にエラーが発生します。
ユーザーが不可能な変換を試みた場合、OceanBase データベースはエラーメッセージを表示します。変換時にデータ型の長さを指定しなかった場合、OceanBase データベースシステムの内部最大長が使用されます。例えば、VARCHAR は 262,143 バイト、NUMBER は 65ビットの浮動小数点です。
CAST() は、符号付きおよび符号なしの64ビット値の演算をサポートします。数値演算子(例:+)を使用していて、一方の演算子が符号なし整数の場合、結果は符号なしになります。SIGNED および UNSIGNED を使用して結果を明示的に宣言し、演算をそれぞれ符号付きまたは符号なしの64ビット整数として指定することができます。いずれかの演算子が浮動小数点数の場合、結果は浮動小数点数になります。
例
数値0を
DATE型に変換します。obclient> SELECT CAST(0 AS DATE); +-----------------+ | CAST(0 AS DATE) | +-----------------+ | 0000-00-00 | +-----------------+ 1 row in set数値123を
TIME型に変換します。obclient> SELECT CAST(123 AS TIME); +-------------------+ | CAST(123 AS TIME) | +-------------------+ | 00:01:23 | +-------------------+ 1 row in set数値123を
DATETIME型に変換します。obclient> SELECT CAST(123 AS DATETIME(4)); +--------------------------+ | CAST(123 AS DATETIME(4)) | +--------------------------+ | 2000-01-23 00:00:00.0000 | +--------------------------+ 1 row in set数値123を
DECIMAL型に変換します。obclient> SELECT CAST(123 AS DECIMAL(3,2)); +---------------------------+ | CAST(123 AS DECIMAL(3,2)) | +---------------------------+ | 9.99 | +---------------------------+ 1 row in set文字列テキスト "123" をJSON型に変換します。
obclient> SELECT CAST("123" AS JSON); +---------------------+ | CAST("123" AS JSON) | +---------------------+ | 123 | +---------------------+ 1 row in set"1-2" の結果を符号なし表現と符号あり表現でそれぞれ出力します。
obclient> SELECT CAST(1-2 AS UNSIGNED), CAST(cast(1-2 AS UNSIGNED) AS SIGNED); +-----------------------+---------------------------------------+ | CAST(1-2 AS UNSIGNED) | CAST(cast(1-2 AS UNSIGNED) AS SIGNED) | +-----------------------+---------------------------------------+ | 18446744073709551615 | -1 | +-----------------------+---------------------------------------+ 1 row in setCAST()を使用して数値演算を行います。obclient> SELECT CAST(1 AS UNSIGNED) - 2.0; +---------------------------+ | CAST(1 AS UNSIGNED) - 2.0 | +---------------------------+ | -1.0 | +---------------------------+ 1 row in set数値123を
CHAR型に変換します。obclient> SELECT CAST(123 AS CHAR(2)); +----------------------+ | CAST(123 AS CHAR(2)) | +----------------------+ | 12 | +----------------------+ 1 row in set数値1を
CHAR型に変換し、文字セットを指定します。obclient> SELECT CAST(1 AS CHAR CHARACTER SET utf8mb4); +---------------------------------------+ | CAST(1 AS CHAR CHARACTER SET utf8mb4) | +---------------------------------------+ | 1 | +---------------------------------------+ 1 row in set文字型
123を整数型に、整数1をINT型に変換します。obclient> SELECT CAST('123' AS INT),CAST(1 AS CHAR(10)); +--------------------+---------------------+ | CAST('123' AS INT) | CAST(1 AS INT) | +--------------------+---------------------+ | 123 | 1 | +--------------------+---------------------+ 1 row in set (0.035 sec
JSON型のデータ [1,2,3] をARRAYデータに変換します。ここで、ARRAYデータはINT型で構成されます。ステートメントは次のとおりです:obclient> SELECT CAST('[1,2,3]' AS ARRAY<INT>); +-------------------------------+ | CAST('[1,2,3]' AS ARRAY<INT>) | +-------------------------------+ | [1,2,3] | +-------------------------------+ 1 row in setJSON型のネスト配列[[1,2],[3,4]]を、ネストされたARRAY<ARRAY<INT>>データに変換します。ステートメントは次のとおりです:obclient> SELECT CAST('[[1,2],[3,4]]' AS ARRAY<ARRAY<INT>>); +--------------------------------------------+ | CAST('[[1,2],[3,4]]' AS ARRAY<ARRAY<INT>>) | +--------------------------------------------+ | [[1,2],[3,4]] | +--------------------------------------------+ 1 row in set浮動小数点数
123.456をBIGINT型に変換します。obclient> SELECT CAST(123.456 AS BIGINT);結果は次のとおりです:
+-------------------------+ | CAST(123.456 AS BIGINT) | +-------------------------+ | 123 | +-------------------------+ 1 row in set