W SQL BETWEEN Operator umożliwia sprawdzenie wartości mieszczących się w danym zakresie.
BETWEEN operator określa zakres do przetestowania i zwraca TRUE gdy operand znajduje się w zakresie porównań.
Tabela źródłowa
Poniższa tabela jest używana jako przykłady na tej stronie.
SELECT * FROM Pets; Wynik:
+---------+-------------+-----------+-----------+------------+ | 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)
Przykład
Oto prosty przykład demonstrujący BETWEEN operatora.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17'; Wynik:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
W tym przykładzie zwróciliśmy wszystkie wiersze, w których DOB kolumna była między 2018-10-01 i 2020-09-17 .
W tym przypadku cztery wiersze spełniały te kryteria, a zatem zostały zwrócone cztery wiersze.
BETWEEN obejmuje
BETWEEN operator. jest inkluzywny. Oznacza to, że zawiera wartości na każdym końcu zakresu. Jeśli spojrzysz na wyniki w poprzednim przykładzie, zobaczysz, że na obu końcach znajdują się wartości, które dokładnie pasują do podanych przez nas dat.
To to samo, co użycie operatora większe lub równe (>= ) w połączeniu z operatorem mniejszym lub równym (<= ).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17'; Wynik:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Aby uczynić go zakresem wyłącznym, użyj większej niż (> ) operator i mniej niż (< ).
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17'; Wynik:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Jeśli musisz użyć BETWEEN operatora, musisz odpowiednio zawęzić zakres.
Tak:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16'; Wynik:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Korzystanie z wartości liczbowych
W poprzednich przykładach użyto dat, ale nie ograniczasz się tylko do dat. Oto przykład wykorzystujący wartości liczbowe.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3; Wynik:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Korzystanie z wartości ciągów
Możemy pójść o krok dalej i użyć BETWEEN aby porównać dwie kolumny ciągów.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName; Wynik:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Musisz jednak być ostrożny. Możesz pomyśleć, że moglibyśmy użyć pierwszej litery, takiej jak ta:
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName; Ale to spowoduje to:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Nie zawierał Wag tak jak poprzednie zapytanie. To dlatego, że BETWEEN patrzy na cały ciąg. W takim przypadku Wag jest większe niż W , więc nie jest uwzględniany w wynikach.