# groonga - オープンソースのカラムストア機能付き全文検索エンジン

- English page

# 8.12.1. between

## 8.12.1.1. 概要

`between` is used for checking the specified value exists in the specific range. It is often used for combination with filter option in select.

## 8.12.1.2. 構文

`between` には引数が5つあります。

    between(column_or_value, min, min_border, max, max_border)

## 8.12.1.3. 使い方

使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。

    table_create Users TABLE_HASH_KEY ShortText
    column_create Users age COLUMN_SCALAR Int32
    table_create Ages TABLE_HASH_KEY Int32
    column_create Ages user_age COLUMN_INDEX Users age
    load --table Users
    [
    {"_key": "Alice",  "age": 12},
    {"_key": "Bob",    "age": 13},
    {"_key": "Calros", "age": 15},
    {"_key": "Dave",   "age": 16},
    {"_key": "Eric",   "age": 20}
    {"_key": "Frank",  "age": 21}
    ]

これはPG-13 (MPAA)のレーティングに該当する人を示すクエリです。

実行例:

    select Users --filter 'between(age, 13, "include", 16, "include")'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         3
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "age",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         2,
    #         "Bob",
    #         13
    #       ],
    #       [
    #         3,
    #         "Calros",
    #         15
    #       ],
    #       [
    #         4,
    #         "Dave",
    #         16
    #       ]
    #     ]
    #   ]
    # ]

13から16歳までのユーザーを返します。

`between` 関数はテーブルのカラムだけでなく、値も受け付けます。

最初の引数に値を指定した場合、その値が含まれているか否かをチェックします。もし、指定した範囲にマッチしたら、( `between` 関数がtrueを返すので)すべてのレコードを返します。

もし、指定した範囲にマッチしなかった場合、( `between` 関数がfalseを返すので)1件もレコードを返しません。

実行例:

    select Users --filter 'between(14, 13, "include", 16, "include")'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         6
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "_key",
    #           "ShortText"
    #         ],
    #         [
    #           "age",
    #           "Int32"
    #         ]
    #       ],
    #       [
    #         1,
    #         "Alice",
    #         12
    #       ],
    #       [
    #         2,
    #         "Bob",
    #         13
    #       ],
    #       [
    #         3,
    #         "Calros",
    #         15
    #       ],
    #       [
    #         4,
    #         "Dave",
    #         16
    #       ],
    #       [
    #         5,
    #         "Eric",
    #         20
    #       ],
    #       [
    #         6,
    #         "Frank",
    #         21
    #       ]
    #     ]
    #   ]
    # ]

上記の例では、すべてのレコードを返します。これは、14は指定した範囲である13から16の間にあるからです。この振舞いは指定した値がテーブルに存在するかどうかの確認に使えます。

## 8.12.1.4. 引数

引数は5つあります。 `column_or_value` と `min` と `min_border` と `max` と `max_border` です。

### 8.12.1.4.1. `column_or_value`

テーブルのカラムもしくは値を指定します。

### 8.12.1.4.2. `min`

範囲のうち最小値を指定します。値 `min` が含まれるかどうかは `min_border` 引数で制御することができます。

### 8.12.1.4.3. `min_border`

`min` の値を含めた範囲となるかどうかを指定します。 `min_border` に指定できるのは "include" または "exclude" のどちらかです。 "include" を指定すれば、`min` が含まれます。 "exclude" を指定すれば `min` は含まれません。

### 8.12.1.4.4. `max`

範囲のうち最大値を指定します。値 `max` が含まれるかどうかは `max_border` 引数で制御することができます。

### 8.12.1.4.5. `max_border`

`man` の値を含めた範囲となるかどうかを指定します。 `max_border` に指定できるのは "include" または "exclude" のどちらかです。 "include" を指定すれば、`max` が含まれます。 "exclude" を指定すれば `max` は含まれません。

## 8.12.1.5. 戻り値

`between` は指定した範囲にカラムの値が含まれるかを返します。もし該当するレコードがあれば、 `true` を返します。そうでなければ `false` を返します。