- JSON型は、JSON型の他のすべての形式にキャストできます。
- JSON型は、JSON UNICODEからJSON LATINにキャストするなど、異なる文字セットのJSON型にキャストできます。
- JSON型は、同じ文字セットのVARCHARとCLOBの間でキャストできます。
- VARCHAR(32,000) CHARACTER SET UNICODE
- VARCHAR(64,000) CHARACTER SET LATIN
- CLOB(8,388,096) CHARACTER SET UNICODE
- CLOB(16,776,192) CHARACTER SET LATIN
- JSON型は、同じ文字セットのCHARにキャストできます。
- CHAR(32,000) CHARACTER SET UNICODE
- CHAR(64,000) CHARACTER SET LATIN
- BYTE、VARBYTE、またはBLOB間で、バイナリ格納形式と指定されたJSON型をキャストできます。
VARCHAR/CHARとの間で相互にJSON型をキャストし、文字セットを指定しない場合は、JSON型の文字セットが使用されます。
キャスト機能は暗黙的に呼び出すことができ、テキストにおけるデータのキャストのやり取りの形式は、JSON構文に従います。
CASTへの入力が空のJSONオブジェクトの場合(例えばSELECT CAST( '' AS JSON);)、キャスト ルーチンは空のJSONオブジェクトを返します。
CAST文にドット表記の式がある場合、データベースは明示的なキャストを実行せずに目的のデータ型を返そうとします。これによりデータ変換上のパフォーマンスが向上します。さらに、変換が失敗した場合にエラーの代わりにNULL値が返されるようになります。これは、対象とするターゲットのデータ型と一致しない異常を含む可能性があるダーティ データを処理するのに役立ちます。
- TIMEまたはTIMESTAMP
- DATE
- LOBまたはCLOB
- UDT
キャストの結果としてデータの切り捨てが発生すると、NULL値が返されます。
例: JSON型でキャストを使用
次のCAST文にドット表記式があります。
SELECT CAST(NEW JSON('{"a":"1"}')..a AS NUMBER);
> 1.E0
SELECT CAST(NEW JSON('{"a":"a"}')..a AS INTEGER);
> ?
SELECT CAST('{}' AS JSON(300) INLINE LENGTH 100);
SELECT CAST(new JSON('{}', LATIN) AS JSON(10) INLINE LENGTH 10);
SELECT CAST(jsn1 AS JSON(300) INLINE LENGTH 300) FROM jsonTable;
キャストと格納の形式
JSON型にキャストする場合は、STORAGE FORMAT構文を使用して、ターゲットのJSON型で必要な格納形式を指定できます。これにより、BYTE/VARBYTE/BLOBデータとオプションのバイナリ形式のいずれかを使用して格納されたJSON型間の変換が容易になります。ある格納形式のJSONデータを他の格納形式にキャストできるように、異なる格納形式のJSON型間で変換することもできます。キャスト機能は暗黙的に呼び出すことができるので、オプションのバイナリ格納形式を使用するJSON列にデータを簡単にロードできます。
BYTE/VARBYTE/BLOBとJSON間でキャストすると、データはキャスト先のバイナリ ストレージ形式の指定に従います。
CHAR/VARCHAR/CLOBデータは、バイナリ形式でJSON型にキャストすることもできます。これは、JSON列にデータを挿入してそのデータをバイナリ形式のいずれかで格納する場合にのみ役立ちます。この場合、文字データは有効なJSON構文にする必要があります。そうしないとエラーが報告されます。バイナリ形式で利用できる任意の拡張データ型は、JSONテキスト形式がこれらの拡張機能を提供しないので、この場合には使用されないことに注意してください。拡張データ型として表わされるデータは、結果として得られるJSONテキストの文字列に変換されます。テキスト形式のJSONからオプションのバイナリ形式のいずれかで格納されているJSONにキャストする場合、同じルールが適用されます。
BSONとして格納されているJSONとUBJSONとして格納されているJSON間でキャストする場合、付随する拡張データ形式がターゲットにない拡張データ形式で指定されているソース データは、文字列値に変換されます。