JSON_ARRAYAGG (SQL)
構文
JSON_ARRAYAGG([ ALL | DISTINCT [BY(col-list)] ]
string-expr
[ %FOREACH(col-list) ] [ %AFTERHAVING ])
引数
| 引数 | 説明 |
|---|---|
| ALL | オプション — JSON_ARRAYAGG が JSON 配列 (string-expr のすべての値が含まれます) を返すように指定します。キーワードが指定されていない場合は、これが既定になります。 |
| DISTINCT | オプション — 一意の string-expr 値のみを含む JSON 配列を JSON_ARRAYAGG が返すように指定する DISTINCT 節。DISTINCT で BY(col-list) 従属節を指定できます。col-list には 1 つのフィールド、またはコンマ区切りのフィールドのリストを指定できます。 |
| string-expr | 文字列として評価する SQL 式。通常は選択されたテーブルの列の名前です。 |
| %FOREACH(col-list) | オプション — 列名、またはコンマで区切られた列名のリスト。%FOREACH の詳細は、"SELECT" を参照してください。 |
| %AFTERHAVING | オプション — HAVING 節にある条件を適用します。 |
概要
JSON_ARRAYAGG 集約関数は、指定された列の値の JSON フォーマットの配列を返します。JSON 配列のフォーマットの詳細は、JSON_ARRAY 関数を参照してください。
シンプルな JSON_ARRAYAGG (または JSON_ARRAYAGG ALL) は、選択された行の string-expr に対応するすべての値を含む JSON 配列を返します。配列では、string-expr が空の文字列 ('') の行を ("\u0000") によって表します。string-expr が NULL の行は、配列に含まれません。string-expr の値が 1 つのみでそれが空の文字列 ('') である場合、JSON_ARRAYAGG は JOSN 配列 ["\u0000"] を返します。string-expr の値がすべて NULL である場合、JSON_ARRAYAGG は空の JSON 配列 [] を返します。
JSON_ARRAYAGG DISTINCT は、選択された行の string-expr に対応するすべての異なる (一意の) 値で構成される JSON 配列を返します (JSON_ARRAYAGG(DISTINCT col1))。NULL の string-expr は、JSON 配列に含まれません。JSON_ARRAYAGG(DISTINCT BY(col2) col1) は、col2 値が個別 (一意) であるレコードのこれらの col1 フィールド値のみが含まれる JSON 配列を返します。ただし、個別の col2 値には、個別値として NULL が 1 つ含まれる場合があります。
JSON_ARRAYAGG string-expr にストリーム・フィールドを指定することはできません。ストリーム・フィールドを指定すると、SQLCODE -37 になります。
エスケープ文字を格納するデータ値
-
二重引用符:string-expr の値に二重引用符文字 (") が含まれている場合、JSON_ARRAYAGG はリテラルのエスケープ・シーケンス \" を使用してこの文字を表します。
-
バックスラッシュ:string-expr の値にバックスラッシュ文字 (\) が含まれている場合、JSON_ARRAYAGG はリテラルのエスケープ・シーケンス \\ を使用してこの文字を表します。
-
一重引用符:string-expr の値にリテラル文字として一重引用符が含まれている場合、InterSystems SQL では、2 つの一重引用符 ('') としてこれを二重にしてこの文字をエスケープする必要があります。JSON_ARRAYAGG は一重引用符文字 ' としてこの文字を表します。
最大 JSON 配列サイズ
JSON_ARRAYAGG の既定の返りタイプは VARCHAR(8192) です。この長さには、JSON 配列フォーマット文字およびフィールド・データ文字が含まれます。返される値が 8192 よりも長い必要があると予想される場合、CAST 関数を使用してより長い返り値を指定できます。例えば、CAST(JSON_ARRAYAGG(value)) AS VARCHAR(12000)) と指定します。返された実際の JSON 配列が JSON_ARRAYAGG の返りタイプの長さよりも長い場合、InterSystems IRIS は、エラーを発行せずに返りタイプの長さで JSON 配列を切り捨てます。JSON 配列を切り捨てると閉じ括弧文字 ] が削除されるため、返り値が無効になります。
JSON_ARRAYAGG と %SelectMode
%SelectMode プロパティを使用して、JSON 配列の要素のデータ表示値を 0 = 論理 (既定)、1 = ODBC、2 = 表示のいずれかに指定できます。string-expr に %List 構造が含まれている場合、その要素は ODBC モードではコンマで区切られて表され、論理モードおよび表示モードでは %List フォーマット文字が \ エスケープ・シーケンスで表されます。これらの JSON \ エスケープ・シーケンスの一覧表は、"$ZCONVERT" で “エンコード変換” を参照してください。
JSON_ARRAYAGG と ORDER BY
JSON_ARRAYAGG 関数は、複数の行のテーブル列の値を要素値の JSON 配列に結合します。すべての集約フィールドが評価された後に ORDER BY 節がクエリ結果セットに適用されるため、ORDER BY がこのリスト内の値の順序に直接影響することはありません。特定の状況下では、JSON_ARRAYAGG の結果が順番に表示されることがありますが、この順番を信頼すべきではありません。特定の集約結果値内にリストされる値を、明示的に順序付けすることはできません。