8.11.1. between

8.11.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.11.1.2. 構文

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

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

8.11.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.11.1.4. 引数

引数は5つあります。 column_or_valueminmin_bordermaxmax_border です。

8.11.1.4.1. column_or_value

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

8.11.1.4.2. min

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

8.11.1.4.3. min_border

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

8.11.1.4.4. max

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

8.11.1.4.5. max_border

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

8.11.1.5. 戻り値

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