配列スライス・ステップ式

構文

array_slice_step ::= "[" [expression] ":" [expression] "]"

セマンティクス

配列スライス・ステップは、主に配列で使用するためのものです。通常、配列スライス・ステップは、要素の位置のみに基づいて配列の要素を選択します。選択する要素は、位置が低位置から高位置までの範囲内にある要素です。低位置および高位置は、低位置の低式と高位置の高式という2つの境界式で計算されます。各境界式は、LONG型、INTEGER型またはNULLの項目を最大1つ返す必要があります。低式または高式(あるいはその両方)がない場合があります。コンテキスト項目変数($)は、境界式の計算中に使用できます。

配列フィルタ・ステップでは、各コンテキスト項目は次のように処理されます。
  • コンテキスト項目が配列でない場合は、配列が作成され、その配列にコンテキスト項目が追加されます。次に説明するように、この単一項目配列に配列フィルタが適用されます。
  • コンテキスト項目が配列の場合、境界式が存在する場合は計算されます。境界式がNULLまたは空の結果を返す場合、コンテキスト項目はスキップされます。それ以外の場合は、LとHをそれぞれ低式と高式によって返される値とします。低式がない場合、Lは0に設定されます。高式がない場合、Hは配列のサイズ- 1に設定されます。L < 0の場合、Lは0に設定されます。H > array_size - 1の場合、Hはarray_size - 1に設定されます。LとHの計算後、ステップは位置LとHの間のすべての要素を選択します(LとHが含まれます)。L > Hの場合、要素は選択されません。

前述のルールに基づいて、スライス・ステップは実際はフィルタ・ステップの特殊なケースであることに注意してください。たとえば、両方の境界式が存在するスライス・ステップは、<input expr>[<low expr> <= $pos and $pos <= <high expr>]と同じです。スライス・ステップは、利便性(およびパフォーマンスの向上)のために用意されています。

例6-29 配列スライス・ステップ式

id 10のユーザーの最も強力な接続を選択します。
SELECT connections[0] AS strongestConnection
FROM users
WHERE id = 10;

例6-30 配列スライス・ステップ式

ユーザー10について、最も強力な5つの接続(つまり、接続配列の最初の5つのid)を選択します。

SELECT [ connections[0:4] ] AS strongConnections
FROM users
WHERE id = 10;

スライス式は最大5つのidを返します。ユーザー10の接続が5つ未満の場合、すべての接続が返されます。

例6-31 配列スライス・ステップ式

ユーザー10について、最も弱い5つの接続(つまり、接続配列の最後の5つのid)を選択します。

SELECT [ connections[size($) - 5 : ] ] AS weakConnections
FROM users
WHERE id = 10;

この例では、size()は特定の配列のサイズを返す関数で、$はコンテキスト配列、つまり、5つの最も弱い接続が選択される配列です。