説明
この関数は、ある組み込みデータ型を別の組み込みデータ型に変換するために使用されます。
構文
CAST ({ expr | MULTISET (subquery) } AS type_name )
パラメータの説明
| パラメータ | 説明 |
|---|---|
| expr | 列名または式。 |
| MULTISET | subquery の結果セットが複数行になる場合、MULTISET キーワードを指定する必要があります。CAST(MULTISET (subquery) ) AS の結果は集合型であり、サブクエリで生成された行は対応する集合要素に変換されます。MULTISET キーワードがない場合、サブクエリはスカラーサブクエリとして扱われます。 |
| AS | 2つのパラメータを区切るために使用されます。AS の前が処理対象のデータ、AS の後が変換対象のデータ型です。 |
| type_name | OceanBaseデータベースの組み込みデータ型名。 |
返り値の型
type_name と同じ型を返します。
次の表は、他の組み込みデータ型に変換できるデータ型を示しています。
| BINARY_FLOAT、BINARY_DOUBLE | CHAR、VARCHAR2 | NUMBER | DATETIME/INTERVAL | RAW | NCHAR、NVARCHAR2 | |
|---|---|---|---|---|---|---|
| BINARY_FLOAT、BINARY_DOUBLEへ | はい | はい | はい | いいえ | いいえ | はい |
| CHAR、VARCHAR2へ | はい | はい | はい | はい | はい | いいえ |
| NUMBERへ | はい | はい | はい | いいえ | いいえ | はい |
| DATETIME、INTERVALへ | いいえ | はい | いいえ | はい | いいえ | いいえ |
| RAWへ | はい | はい | はい | いいえ | はい | いいえ |
| NCHAR、NVARCHAR2へ | はい | いいえ | はい | はい | はい | はい |
説明
to DATETIME/INTERVAL データ型には DATE、TIMESTAMP、TIMESTAMP WITH TIMEZONE、INTERVAL DAY TO SECOND および INTERVAL YEAR TO MONTH が含まれます。
例
以下の例では、それぞれ文字列型の 123 を整数型に変換し、整数 1 を VARCHAR2(10) 型に変換し、22-OCT-2021 を TIMESTAMP WITH LOCAL TIME ZONE 型に変換します。
obclient> SELECT CAST('123' AS INT),CAST(1 AS VARCHAR2(10)),CAST('22-OCT-2021' AS TIMESTAMP WITH LOCAL TIME ZONE)
AS RESULT FROM DUAL;
+------------------+-----------------------+------------------------------+
| CAST('123'ASINT) | CAST(1ASVARCHAR2(10)) | RESULT |
+------------------+-----------------------+------------------------------+
| 123 | 1 | 22-OCT-21 12.00.00.000000 AM |
+------------------+-----------------------+------------------------------+
1 row in set
説明
日付型データを変換する際、この関数は NLS_DATE_FORMAT パラメータの影響を受けます。まず、次のステートメントを実行して NLS_DATE_FORMAT フォーマットを変更することを推奨します:ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
以下の例は、Table Function内で MULTISET を使用して集合型の結果を取得する方法です。
obclient> CREATE OR REPLACE TYPE tbl_int AS TABLE OF INT;
Query OK, 0 rows affected
obclient> CREATE TABLE t1(c1 INT, c2 INT);
Query OK, 0 rows affected
obclient> CREATE TABLE t2(c1 INT, c2 INT);
Query OK, 0 rows affected
obclient> INSERT INTO t1 VALUES (1,1);
Query OK, 1 row affected
obclient> INSERT INTO t2 VALUES (1,2);
Query OK, 1 row affected
obclient> INSERT INTO t2 VALUES (1,3);
Query OK, 1 row affected
obclient> SELECT * FROM t1,TABLE(CAST(MULTISET(SELECT t2.c2 FROM t2 WHERE t1.c1=t2.c1) AS tbl_int));
+------+------+--------------+
| C1 | C2 | COLUMN_VALUE |
+------+------+--------------+
| 1 | 1 | 2 |
| 1 | 1 | 3 |
+------+------+--------------+