- カテゴリ:
CAST、 ::
¶
あるデータ型の値を別のデータ型に変換します。CAST のセマンティクスは、対応する TO_ datatype
変換関数のセマンティクスと同じです。キャストが不可能な場合は、エラーが発生します。詳細については、個々の TO_ datatype
変換関数をご参照ください。データ型変換と TO_ datatype
変換関数の詳細については、 データ型の変換 をご参照ください。
::
演算子は、 CASTの代替構文を提供します。
- こちらもご参照ください。
構文¶
CAST( <source_expr> AS <target_data_type> )
[ RENAME FIELDS | ADD FIELDS ]
<source_expr> :: <target_data_type>
引数¶
source_expr
異なるデータ型に変換される、サポートされているデータ型の式です。
target_data_type
式を変換するデータ型です。データ型が、 精度やスケール (数値/小数用)などの追加のプロパティをサポートする場合は、プロパティを含めることができます。
RENAME FIELDS
構造化 OBJECTs の場合、異なるキーと値のペアを使用するために OBJECT を変更することを指定します。元のオブジェクトの値は、新しいキーと値のペアにそれらが表示される順でコピーされます。
例については、 例: OBJECT 内のキー名の変更 をご参照ください。
ADD FIELDS
構造化 OBJECTs の場合、 OBJECT にキーと値のペアを追加することを指定します。
例については、 例: OBJECT へのキーの追加 をご参照ください。
新しく追加されたキーの値は NULL に設定されます。これらのキーに値を割り当てる場合は、 OBJECT_INSERT 関数を代わりに呼び出します。
使用上の注意¶
スケールが入力値を保持するのに十分でない場合、関数は値を丸めます。
精度が入力値を保持するのに十分でない場合、関数はエラーを発生します。
Parquetファイルへのデータのアンロード中に、数値列が整数データ型の形式に明示的にキャストされる場合、Parquetファイル内にあるこれらの列のデータ型は INT です。詳細については、 明示的に数値列をParquetデータ型に変換する をご参照ください。
::
代替構文を使用する場合、RENAME FIELDS
またはADD FIELDS
の引数を指定することはできません。
例¶
CAST の例では、以下のテーブルのデータを使用しています。
CREATE OR REPLACE TABLE test_data_type_conversion (
varchar_value VARCHAR,
number_value NUMBER(5, 4),
timestamp_value TIMESTAMP);
INSERT INTO test_data_type_conversion VALUES (
'9.8765',
1.2345,
'2024-05-09 14:32:29.135 -0700');
SELECT * FROM test_data_type_conversion;
+---------------+--------------+-------------------------+
| VARCHAR_VALUE | NUMBER_VALUE | TIMESTAMP_VALUE |
|---------------+--------------+-------------------------|
| 9.8765 | 1.2345 | 2024-05-09 14:32:29.135 |
+---------------+--------------+-------------------------+
例では、変換後の値のデータ型を示すために SYSTEM$TYPEOF 関数を使用しています。
文字列を指定されたスケール(2)で数値に変換します。
SELECT CAST(varchar_value AS NUMBER(5,2)) AS varchar_to_number1,
SYSTEM$TYPEOF(varchar_to_number1) AS data_type
FROM test_data_type_conversion;
+--------------------+------------------+
| VARCHAR_TO_NUMBER1 | DATA_TYPE |
|--------------------+------------------|
| 9.88 | NUMBER(5,2)[SB4] |
+--------------------+------------------+
::
表記を使用して、同じ文字列をスケール5で数値に変換します。
SELECT varchar_value::NUMBER(6,5) AS varchar_to_number2,
SYSTEM$TYPEOF(varchar_to_number2) AS data_type
FROM test_data_type_conversion;
+--------------------+------------------+
| VARCHAR_TO_NUMBER2 | DATA_TYPE |
|--------------------+------------------|
| 9.87650 | NUMBER(6,5)[SB4] |
+--------------------+------------------+
数値を整数に変換します。整数の場合は精度とスケールが指定できないため、デフォルトは常に NUMBER(38, 0)です。
SELECT CAST(number_value AS INTEGER) AS number_to_integer,
SYSTEM$TYPEOF(number_to_integer) AS data_type
FROM test_data_type_conversion;
+-------------------+-------------------+
| NUMBER_TO_INTEGER | DATA_TYPE |
|-------------------+-------------------|
| 1 | NUMBER(38,0)[SB1] |
+-------------------+-------------------+
数値を文字列に変換します。
SELECT CAST(number_value AS VARCHAR) AS number_to_varchar,
SYSTEM$TYPEOF(number_to_varchar) AS data_type
FROM test_data_type_conversion;
+-------------------+------------------------+
| NUMBER_TO_VARCHAR | DATA_TYPE |
|-------------------+------------------------|
| 1.2345 | VARCHAR(16777216)[LOB] |
+-------------------+------------------------+
タイムスタンプを日付に変換します。
SELECT CAST(timestamp_value AS DATE) AS timestamp_to_date,
SYSTEM$TYPEOF(timestamp_to_date) AS data_type
FROM test_data_type_conversion;
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09 | DATE[SB4] |
+-------------------+-----------+