V SQL, BETWEEN operátor umožňuje kontrolovat hodnoty, které jsou v daném rozsahu.
BETWEEN operátor určuje rozsah, který se má testovat, a vrací TRUE když je operand v rozsahu srovnání.
Tabulka zdrojů
Následující tabulka je použita pro příklady na této stránce.
SELECT * FROM Pets; Výsledek:
+---------+-------------+-----------+-----------+------------+ | 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)
Příklad
Zde je jednoduchý příklad pro demonstraci BETWEEN operátor.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17'; Výsledek:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
V tomto příkladu jsme vrátili všechny řádky s DOB byl mezi 2018-10-01 a 2020-09-17 .
V tomto případě tomuto kritériu odpovídaly čtyři řádky, a proto byly vráceny čtyři řádky.
BETWEEN je včetně
BETWEEN operátor. je inkluzivní. To znamená, že zahrnuje hodnoty na každém konci rozsahu. Pokud se podíváte na výsledky v předchozím příkladu, uvidíte, že na obou koncích jsou hodnoty, které přesně odpovídají datům, která jsme poskytli.
Je to stejné jako použití operátoru větší než nebo rovno (>= ) v kombinaci s operátorem menší nebo rovno (<= ).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17'; Výsledek:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Chcete-li z toho udělat exkluzivní rozsah, použijte větší než (> ) operátor a menší než (< ) operátor.
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17'; Výsledek:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Pokud musíte použít BETWEEN operátora, budete muset odpovídajícím způsobem zúžit rozsah.
Takhle:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16'; Výsledek:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Použití číselných hodnot
Předchozí příklady používají data, ale nejste omezeni pouze na data. Zde je příklad, který používá číselné hodnoty.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3; Výsledek:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Použití řetězcových hodnot
Mohli bychom to udělat o krok dále a použít BETWEEN porovnat dva sloupce řetězce.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName; Výsledek:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Musíte však být opatrní. Možná si myslíte, že bychom mohli použít jen počáteční písmeno, například takto:
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName; Ale to bude mít za následek toto:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Nezahrnovalo Wag stejně jako předchozí dotaz. Je to proto, že BETWEEN dívá se na celý řetězec. V takovém případě Wag je větší než W , a proto není zahrnut ve výsledcích.