JSON型のキャストについて

Teradata® Database JSONデータ型

brand
Software
prodname
Teradata Database
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1150-162K-JPN
Teradataは、JSON型のキャスト機能を提供します。
  • 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値が返されるようになります。

キャストの結果としてデータの切り捨てが発生すると、NULL値が返されます。

例: JSON型でキャストを使用

次のCAST文にドット表記式があります。

SELECT CAST(NEW JSON('{"a":"1"}')..a AS NUMBER);
結果:
> 1.E0
SELECT CAST(NEW JSON('{"a":"a"}')..a AS INTEGER);
結果:
> ?
次のCAST文は、結果として得られるJSON型のインライン長を指定します。
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間でキャストする場合、付随する拡張データ形式がターゲットにない拡張データ形式で指定されているソース データは、文字列値に変換されます。