JSONデータの抽出の例 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - JSONデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年9月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/gzn1554761068186.ditamap
dita:ditavalPath
ja-JP/gzn1554761068186.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage

JSONドット表記法構文またはJSONExtractValue(または、JSONExtractLargeValue)メソッドでSELECT文を使用すると、JSONインスタンスから単一のスカラー値を抽出できます。ただし、JSONドット表記法またはJSONExtractValue(または、JSONExtractLargeValue)メソッドを使用して、複数の値を抽出しようとすると、データベースはデフォルトで警告とエラー メッセージ文字列を返します。

JSONドット表記法を使用して複数のオブジェクト メンバーを抽出しているので、次のクエリーは警告とエラー メッセージ文字列を返します。代わりに返される値のリストが必要な場合は、SET SESSION DOT NOTATION...ON ERROR文またはDBSコントロール フィールドDotNotationOnErrorConditionを使用してこの動作を指定する必要があります。JSONドット表記法で次の構文要素を使用すると、複数の結果が返されることが考えられるので注意してください。
  • 再帰下降演算子
  • ワイルドカード
  • 名前またはインデックス リスト
  • スライス
詳細は、JSONドット表記法(エンティティ参照)を参照してください。
SELECT NEW JSON('{"name":"Al","name":"Betty"}').name;

結果:

*** Query completed. One row found. One column returned.
*** Warning: 7548 More than one result per JSON instance found.
*** Total elapsed time was 1 second.

NEW JSON('{"name":"Al","name":"Betty"}', LATIN).name
-----------------------------------------------------------------
*** ERROR MULTI RESULT ***

ドット表記法の代わりにJSONExtractValueを使用する同じ問合わせも、警告とエラー メッセージ文字列を返します。

SELECT NEW JSON('{"name":"Al","name":"Betty"}').JSONExtractValue('$.name');

結果:

*** Query completed. One row found. One column returned.
*** Warning: 7548 More than one result per JSON instance found.
*** Total elapsed time was 1 second.

NEW JSON('{"name":"Al","name":"Betty"}', LATIN).JSONEXTRACTVALUE('$.name')
---------------------------------------------------------------------------
*** ERROR MULTI RESULT ***

JSONExtractメソッドを使用して、複数の値を抽出できます。 JSONExtractメソッドを使用した同じ問合わせは成功し、JSON配列の複数の値を返します。

SELECT NEW JSON('{"name":"Al","name":"Betty"}').JSONExtract('$.name');

結果:

*** Query completed. One row found. One column returned.
*** Total elapsed time was 1 second.

NEW JSON('{"name":"Al","name":"Betty"}', LATIN).JSONEXTRACT('$.name')
---------------------------------------------------------------------------
["Al","Betty"]