例: 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間でキャストする場合、付随する拡張データ形式がターゲットにない拡張データ形式で指定されているソース データは、文字列値に変換されます。
例
次のSELECT文はすべて{"hello":"world"}を返しますが、異なるデータ型とストレージ形式として返します。
SELECT CAST('160000000268656C6C6F0006000000776F726C640000'xb AS JSON STORAGE FORMAT BSON); SELECT CAST('{"hello":"world"}' AS JSON STORAGE FORMAT BSON); SELECT CAST('{"hello":"world"}' AS JSON STORAGE FORMAT UBJSON); SELECT CAST(NEW JSON('{"hello":"world"}') AS JSON STORAGE FORMAT BSON); SELECT CAST(NEW JSON('{"hello":"world"}') AS JSON STORAGE FORMAT UBJSON); SELECT CAST(NEW JSON('{"hello":"world"}',LATIN) AS JSON STORAGE FORMAT BSON); SELECT CAST(NEW JSON('{"hello":"world"}',LATIN) AS JSON STORAGE FORMAT UBJSON); SELECT CAST(NEW JSON('{"hello":"world"}',UNICODE) AS JSON STORAGE FORMAT BSON); SELECT CAST(NEW JSON('{"hello":"world"}',UNICODE) AS JSON STORAGE FORMAT UBJSON); SELECT CAST(NEW JSON('160000000268656C6C6F0006000000776F726C640000'xb, BSON) AS JSON STORAGE FORMAT UBJSON);