メインコンテンツまでスキップ

bitmap_subset_limit

bitmap_subset_limit

説明

指定された要素数を、start_rangeから始まる要素で、BITMAPの値から取り出します。取り出された要素はsrcのサブセットです。

この関数は、ページネーションされたクエリなどのシナリオで主に使用されます。v3.1以降でサポートされています。

この関数はsub_bitmapに似ていますが、違いはこの関数が要素の値(start_range)から始まる要素を取り出すのに対して、sub_bitmapはオフセットから始まる要素を取り出す点です。

構文

BITMAP bitmap_subset_limit(BITMAP src, BIGINT start_range, BIGINT limit)

パラメータ

  • src: 要素を取得するためのBITMAP値です。
  • start_range: 要素を取り出す開始範囲です。BIGINTの値でなければなりません。指定された開始範囲がBITMAP値の最大要素を超えており、かつlimitが正の場合、NULLが返されます。 Example 4を参照してください。
  • limit: start_rangeから始まる要素を取得する数です。負の制限は右から左に数えられます。一致する要素の数がlimitの値よりも少ない場合、すべての一致する要素が返されます。

戻り値

BITMAP型の値が返されます。入力パラメータのいずれかが無効な場合は、NULLが返されます。

使用上の注意

  • サブセットの要素にはstart_rangeが含まれます。
  • 負の制限は右から左に数えられます。Example 3を参照してください。

以下の例では、bitmap_subset_limit()の入力はbitmap_from_stringの出力です。例えば、bitmap_from_string('1,1,3,1,5,3,5,7,7,9')1, 3, 5, 7, 9を返します。bitmap_subset_limit()はこのBITMAP値を入力とします。

Example 1: 要素の値が1から始まるBITMAP値から4つの要素を取得します。

select bitmap_to_string(bitmap_subset_limit(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 1, 4)) value;
+---------+
| value |
+---------+
| 1,3,5,7 |
+---------+

Example 2: 要素の値が1から始まるBITMAP値から100の要素を取得します。制限はBITMAP値の長さを超えており、すべての一致する要素が返されます。

select bitmap_to_string(bitmap_subset_limit(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 1, 100)) value;
+-----------+
| value |
+-----------+
| 1,3,5,7,9 |
+-----------+

Example 3: 要素の値が5から始まるBITMAP値から-2つの要素を取得します(右から左に数える)。

select bitmap_to_string(bitmap_subset_limit(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 5, -2)) value;
+-----------+
| value |
+-----------+
| 3,5 |
+-----------+

Example 4: 開始範囲10がBITMAP値1,3,5,7,9の最大要素を超えており、制限が正の場合はNULLが返されます。

select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 10, 15)) value;
+-------+
| value |
+-------+
| NULL |
+-------+