この文書では、範囲判定を行う演算子を考えます。
SQL の範囲判定は X between L and H
という構文をもっています。
ここでは、もう少し一般化された構文を考案しましょう。
演算子の名前は range
とします。
0 以上、100 以下。
range /x : 0 and 100
大小符号を明示的に指定できます。
range /x : >= 0 and <= 100
0 以上、100 未満。
range /x : >= 0 and < 100
0 以上、100 未満だけど、50 ではない。
range /x : >= 0 and < 100 and <> 50
0 以上、10 以下、または、20 以上、30 以下。
range /x : >= 0 and <= 10 : >= 20 and <= 30
0 か 1 か 2。
range /x : = 0 : = 1 : = 2
0 か 1 か 2。
range /x : 0 : 1 : 2
-
range
の引数を:
で分割します。 -
先頭要素以外を論理和で結び、先頭要素を判定します。
-
論理和の各式を
and
で分割します。 -
and
の引数となる各式を、つぎのいずれかに分類します。 X、=
X、<>
X、<
X、<=
X、>
X、>=
X -
等号、不等号のない X の形式であるときは、
and
の左辺なら>=
を補い、右辺なら<=
を補い、 それ以外なら=
を補います。