カテゴリ:

条件式関数

[ NOT ] BETWEEN

入力式(数値または文字列)が指定された下限および上限内にある場合、 TRUE を返します。

構文

<expr> [ NOT ] BETWEEN <lower_bound> AND <upper_bound>
Copy

引数

expr

入力式。

lower_bound

下限。

upper_bound

上限。

戻り値

この関数は、 BOOLEAN 型の値を返します。

使用上の注意

  • expr BETWEEN lower_bound AND upper_bound は、 expr >= lower_bound AND expr <= upper_bound と同等です。

  • 指定された上限は下限より大きくなければなりません。

  • 引数値のデータ型は、同じか 互換性がある ものである必要があります。

    関数が暗黙的に値を別のデータ型にキャストすると、予期しない結果を返す場合があります。

    例えば、 expr が TIMESTAMP 値で、 lower_boundupper_bound が DATE 値の場合、 DATE 値は暗黙的に TIMESTAMP 値にキャストされ、時刻は 00:00:00 に設定されます。以下の WHERE 句では、 timestamp_column がテーブルの TIMESTAMP 型の列であるとします。

    WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-04-31'
    
    Copy

    DATE 値が暗黙的にキャストされる場合、 WHERE 句は以下のように解釈されます。

    WHERE timestamp_column BETWEEN '2025-04-30 00:00:00' AND '2025-04-31 00:00:00'
    
    Copy

    この WHERE 句を使うと、関数は2025-04-31のほぼすべての timestamp_column 値に対して FALSE を返します。この特定の問題を回避するには、関数を呼び出す際に upper_bound に翌日を指定します。

    WHERE timestamp_column BETWEEN '2025-04-30' AND '2025-05-01'
    
    Copy

照合順序の詳細

A BETWEEN X AND Y は、 A >= X AND A <= Y と同等です。 X および Y との比較に使用される照合は独立しており、同一である必要はありませんが、両方が A の照合と互換性がある必要があります。

以下に、数値と文字列値で BETWEEN を使用する簡単な例をいくつか示します。

SELECT 'true' WHERE 1 BETWEEN 0 AND 10;
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+
SELECT 'true' WHERE 1.35 BETWEEN 1 AND 2;
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+
SELECT 'true' WHERE 'the' BETWEEN 'that' AND 'then';
Copy
+--------+
| 'TRUE' |
|--------|
| true   |
+--------+

以下の例では、 COLLATE を BETWEEN と共に使用しています。

SELECT 'm' BETWEEN COLLATE('A', 'lower') AND COLLATE('Z', 'lower');
Copy
+-------------------------------------------------------------+
| 'M' BETWEEN COLLATE('A', 'LOWER') AND COLLATE('Z', 'LOWER') |
|-------------------------------------------------------------|
| True                                                        |
+-------------------------------------------------------------+
SELECT COLLATE('m', 'upper') BETWEEN 'A' AND 'Z';
Copy
+-------------------------------------------+
| COLLATE('M', 'UPPER') BETWEEN 'A' AND 'Z' |
|-------------------------------------------|
| True                                      |
+-------------------------------------------+