カテゴリ:

変換関数

CAST、 ::

あるデータ型の値を別のデータ型に変換します。CAST のセマンティクスは、対応する TO_ datatype 変換関数のセマンティクスと同じです。キャストが不可能な場合は、エラーが発生します。詳細については、個々の TO_ datatype 変換関数をご参照ください。データ型変換と TO_ datatype 変換関数の詳細については、 データ型の変換 をご参照ください。

:: 演算子は、 CASTの代替構文を提供します。

こちらもご参照ください。

TRY_CAST

構文

CAST( <source_expr> AS <target_data_type> )
  [ RENAME FIELDS | ADD FIELDS ]

<source_expr> :: <target_data_type>
Copy

引数

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;
Copy
+---------------+--------------+-------------------------+
| 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;
Copy
+--------------------+------------------+
| 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;
Copy
+--------------------+------------------+
| 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;
Copy
+-------------------+-------------------+
| 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;
Copy
+-------------------+------------------------+
| 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;
Copy
+-------------------+-----------+
| TIMESTAMP_TO_DATE | DATA_TYPE |
|-------------------+-----------|
| 2024-05-09        | DATE[SB4] |
+-------------------+-----------+