説明
この関数は、ある組み込みデータ型を別の組み込みデータ型に変換するために使用されます。
構文
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 と同じ型を返します。
次の表は、他の組み込みデータ型に変換できるデータ型を示しています。
from BINARY_FLOAT, BINARY_DOUBLE |
from CHAR, VARCHAR2 |
from NUMBER |
from DATETIME/INTERVAL |
from RAW |
from NCHAR, NVARCHAR2 |
|
|---|---|---|---|---|---|---|
| to BINARY_FLOAT, BINARY_DOUBLE | yes | yes | yes | no | no | yes |
| to CHAR, VARCHAR2 | yes | yes | yes | yes | yes | no |
| to NUMBER | yes | yes | yes | no | no | yes |
| to DATETIME, INTERVAL | no | yes | no | yes | no | no |
| to RAW | yes | yes | yes | no | yes | no |
| to NCHAR, NVARCHAR2 | yes | no | yes | yes | yes | yes |
説明
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 |
+------+------+--------------+