- カテゴリ:
[ NOT ] BETWEEN¶
入力式(数値または文字列)が指定された下限および上限内にある場合、 TRUE
を返します。
構文¶
<expr> [ NOT ] BETWEEN <lower_bound> AND <upper_bound>
引数¶
expr
入力式。
lower_bound
下限。
upper_bound
上限。
戻り値¶
この関数は、 BOOLEAN 型の値を返します。
使用上の注意¶
expr BETWEEN lower_bound AND upper_bound
は、expr >= lower_bound AND expr <= upper_bound
と同等です。指定された上限は下限より大きくなければなりません。
引数値のデータ型は、同じか 互換性がある ものである必要があります。
関数が暗黙的に値を別のデータ型にキャストすると、予期しない結果を返す場合があります。
例えば、
expr
が TIMESTAMP 値で、lower_bound
とupper_bound
が DATE 値の場合、 DATE 値は暗黙的に TIMESTAMP 値にキャストされ、時刻は00:00:00
に設定されます。以下の WHERE 句では、timestamp_column
がテーブルの TIMESTAMP 型の列であるとします。WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-04-31'
DATE 値が暗黙的にキャストされる場合、 WHERE 句は以下のように解釈されます。
WHERE timestamp_column BETWEEN '2025-04-30 00:00:00' AND '2025-04-31 00:00:00'
この WHERE 句を使うと、関数は2025-04-31のほぼすべての
timestamp_column
値に対してFALSE
を返します。この特定の問題を回避するには、関数を呼び出す際にupper_bound
に翌日を指定します。WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-05-01'
照合順序の詳細¶
式 A BETWEEN X AND Y
は、 A >= X AND A <= Y
と同等です。 X
および Y
との比較に使用される照合は独立しており、同一である必要はありませんが、両方が A
の照合と互換性がある必要があります。
例¶
以下に、数値と文字列値で BETWEEN を使用する簡単な例をいくつか示します。
SELECT 'true' WHERE 1 BETWEEN 0 AND 10;
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
SELECT 'true' WHERE 1.35 BETWEEN 1 AND 2;
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
SELECT 'true' WHERE 'the' BETWEEN 'that' AND 'then';
+--------+
| 'TRUE' |
|--------|
| true |
+--------+
以下の例では、 COLLATE を BETWEEN と共に使用しています。
SELECT 'm' BETWEEN COLLATE('A', 'lower') AND COLLATE('Z', 'lower');
+-------------------------------------------------------------+
| 'M' BETWEEN COLLATE('A', 'LOWER') AND COLLATE('Z', 'LOWER') |
|-------------------------------------------------------------|
| True |
+-------------------------------------------------------------+
SELECT COLLATE('m', 'upper') BETWEEN 'A' AND 'Z';
+-------------------------------------------+
| COLLATE('M', 'UPPER') BETWEEN 'A' AND 'Z' |
|-------------------------------------------|
| True |
+-------------------------------------------+