sql >> データベース >  >> RDS >> Database

初心者のためのSQLBETWEEN演算子

    SQLでは、 BETWEEN 演算子を使用すると、指定された範囲内の値を確認できます。

    BETWEEN 演算子はテストする範囲を指定し、 TRUEを返します オペランドが比較の範囲内にある場合。

    ソーステーブル

    このページの例では、次の表を使用しています。

    SELECT * FROM Pets;

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 1       | 2           | 3         | Fluffy    | 2020-11-20 |
    | 2       | 3           | 3         | Fetch     | 2019-08-16 |
    | 3       | 2           | 2         | Scratch   | 2018-10-01 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    | 5       | 1           | 1         | Tweet     | 2020-11-28 |
    | 6       | 3           | 4         | Fluffy    | 2020-09-17 |
    | 7       | 3           | 2         | Bark      | NULL       |
    | 8       | 2           | 4         | Meow      | NULL       |
    +---------+-------------+-----------+-----------+------------+
    (8 rows affected)

    BETWEENを示す簡単な例を次に示します。 オペレーター。

    SELECT * FROM Pets 
    WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17';

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 2       | 3           | 3         | Fetch     | 2019-08-16 |
    | 3       | 2           | 2         | Scratch   | 2018-10-01 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    | 6       | 3           | 4         | Fluffy    | 2020-09-17 |
    +---------+-------------+-----------+-----------+------------+

    この例では、 DOBが存在するすべての行を返しました。 列は2018-10-01の間にありました および2020-09-17

    この場合、4つの行がその基準に一致したため、4つの行が返されました。

    BETWEENは包括的です

    BETWEEN オペレーター。包括的です。つまり、範囲の両端の値が含まれます。前の例の結果を見ると、両端に、指定した日付と正確に一致する値があることがわかります。

    これは、以上の演算子(> =)を使用するのと同じです。 )以下の演算子( <=)と組み合わせる 。

    SELECT * FROM Pets 
    WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17';

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 2       | 3           | 3         | Fetch     | 2019-08-16 |
    | 3       | 2           | 2         | Scratch   | 2018-10-01 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    | 6       | 3           | 4         | Fluffy    | 2020-09-17 |
    +---------+-------------+-----------+-----------+------------+

    排他的な範囲にするには、より大きい(> )を使用します )演算子およびより小さい( < )演算子。

    SELECT * FROM Pets 
    WHERE DOB > '2018-10-01' AND DOB < '2020-09-17';

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 2       | 3           | 3         | Fetch     | 2019-08-16 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    +---------+-------------+-----------+-----------+------------+

    BETWEENを使用する必要がある場合 オペレーターの場合、それに応じて範囲を狭める必要があります。

    このように:

    SELECT * FROM Pets 
    WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16';

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 2       | 3           | 3         | Fetch     | 2019-08-16 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    +---------+-------------+-----------+-----------+------------+

    数値の使用

    前の例では日付を使用していますが、日付だけに限定されていません。数値を使用する例を次に示します。

    SELECT * FROM Pets 
    WHERE OwnerId BETWEEN 2 AND 3;

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 1       | 2           | 3         | Fluffy    | 2020-11-20 |
    | 2       | 3           | 3         | Fetch     | 2019-08-16 |
    | 3       | 2           | 2         | Scratch   | 2018-10-01 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    | 7       | 3           | 2         | Bark      | NULL       |
    +---------+-------------+-----------+-----------+------------+

    文字列値の使用

    さらに一歩進んで、 BETWEENを使用することもできます 2つの文字列列を比較します。

    SELECT * FROM Pets 
    WHERE PetName BETWEEN 'Meow' AND 'Wag'
    ORDER BY PetName;

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 8       | 2           | 4         | Meow      | NULL       |
    | 3       | 2           | 2         | Scratch   | 2018-10-01 |
    | 5       | 1           | 1         | Tweet     | 2020-11-28 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    +---------+-------------+-----------+-----------+------------+

    ただし、注意する必要があります。次のように、頭文字だけを使用できると思われるかもしれません。

    SELECT * FROM Pets 
    WHERE PetName BETWEEN 'M' AND 'W'
    ORDER BY PetName;

    しかし、その結果は次のようになります:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 8       | 2           | 4         | Meow      | NULL       |
    | 3       | 2           | 2         | Scratch   | 2018-10-01 |
    | 5       | 1           | 1         | Tweet     | 2020-11-28 |
    +---------+-------------+-----------+-----------+------------+

    Wagは含まれていません 前のクエリのように。これは、 BETWEEN 文字列全体を調べます。その場合、 Wag Wより大きい 、したがって、結果には含まれません。


    1. MySQLで日付と時刻をフォーマットする方法

    2. AndroidSQLiteワイルドカード

    3. パイプで区切られた文字列を列に解析しますか?

    4. CASEステートメントとDECODEは同等ですか?