bitmap_subset_in_range
bitmap_subset_in_range
説明
start_range
とend_range
の範囲内(排他的)でBitmap値から要素を抜き出します。出力される要素はBitmap値の部分集合です。
この関数は、ページネーションのクエリなどのシナリオで主に使用されます。 v3.1からサポートされています。
構文
BITMAP bitmap_subset_in_range(BITMAP src, BIGINT start_range, BIGINT end_range)
パラメータ
src
: 要素を取得するBitmap値。start_range
: 要素 を抜き出す開始範囲。BIGINT値である必要があります。指定した開始範囲がBITMAP値の最大長を超える場合、NULL
が返されます。例4を参照してください。end_range
: 要素を抜き出す終了範囲。BIGINT値である必要があります。end_range
がstart_range
以下である場合、NULL
が返されます。例3を参照してください。
戻り値
BITMAP型の値が返さ れます。入力パラメータのいずれかが無効な場合はNULL
が返されます。
使用上の注意
部分集合の要素にはstart_range
が含まれますが、end_range
は含まれません。例5を参照してください。
例
以下の例では、bitmap_subset_in_range()の入力はbitmap_from_stringの出力です。例えば、 bitmap_from_string('1,1,3,1,5,3,5,7,7,9')
は 1, 3, 5, 7, 9
を返します。bitmap_subset_in_range()は、このBITMAP値を入力とします。
例1:範囲が1から4の間のBITMAP値から部分集合を取得します。この範囲内の値は1および3です。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 1, 4)) value;
+-------+
| value |
+-------+
| 1,3 |
+-------+
例2:範囲が1から100の間のBITMAP値から部分集合を取得します。終了値がBITMAP値の最大長を超えており、すべての一致する要素が返されます。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 0, 100)) value;
+-----------+
| value |
+-----------+
| 1,3,5,7,9 |
+-----------+
例3:終了範囲の3
が開始範囲の4
よりも小さいため、NULL
が返されます。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,3,5,7,7,9'), 4, 3)) value;
+-------+
| value |
+-------+
| NULL |
+-------+
例4:開始範囲の10がBITMAP値 1,3,5,7,9
の最大長(5)を超えています。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 |
+-------+
例5:返される部分集合には開始値 1
が含まれますが、終了値 3
は含まれません。
select bitmap_to_string(bitmap_subset_in_range(bitmap_from_string('1,1,3,1,5,4,5,6,7,9'), 1, 3)) value;
+-------+
| value |
+-------+
| 1 |
+-------+