使い方を示すために使うスキーマ定義とサンプルデータは以下の通りです。
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の間にあるからです。この振舞いは指定した値がテーブルに存在するかどうかの確認に使えます。
引数は5つあります。 column_or_value と min と min_border と max と max_border です。
テーブルのカラムもしくは値を指定します。
範囲のうち最小値を指定します。値 min が含まれるかどうかは min_border 引数で制御することができます。
min の値を含めた範囲となるかどうかを指定します。 min_border に指定できるのは "include" または "exclude" のどちらかです。 "include" を指定すれば、min が含まれます。 "exclude" を指定すれば min は含まれません。
範囲のうち最大値を指定します。値 max が含まれるかどうかは max_border 引数で制御することができます。
man の値を含めた範囲となるかどうかを指定します。 max_border に指定できるのは "include" または "exclude" のどちらかです。 "include" を指定すれば、max が含まれます。 "exclude" を指定すれば max は含まれません。
between は指定した範囲にカラムの値が含まれるかを返します。もし該当するレコードがあれば、 true を返します。そうでなければ false を返します。