In SQL der BETWEEN Mit dem Operator können Sie nach Werten suchen, die innerhalb eines bestimmten Bereichs liegen.
Der BETWEEN Der Operator gibt einen zu testenden Bereich an und gibt TRUE zurück wenn der Operand innerhalb des Vergleichsbereichs liegt.
Quelltabelle
Die folgende Tabelle wird für die Beispiele auf dieser Seite verwendet.
SELECT * FROM Pets; Ergebnis:
+---------+-------------+-----------+-----------+------------+ | 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)
Beispiel
Hier ist ein einfaches Beispiel, um den BETWEEN zu demonstrieren Betreiber.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17'; Ergebnis:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
In diesem Beispiel haben wir alle Zeilen zurückgegeben, in denen DOB Spalte war zwischen 2018-10-01 und 2020-09-17 .
In diesem Fall stimmten vier Zeilen mit diesen Kriterien überein und daher wurden vier Zeilen zurückgegeben.
BETWEEN ist inklusive
Der BETWEEN Operator. ist inklusive. Das heißt, es enthält die Werte an jedem Ende des Bereichs. Wenn Sie sich die Ergebnisse im vorherigen Beispiel ansehen, werden Sie feststellen, dass an beiden Enden Werte vorhanden sind, die genau mit den von uns angegebenen Daten übereinstimmen.
Dies entspricht der Verwendung des Größer-gleich-Operators (>= ) kombiniert mit dem Kleiner-gleich-Operator (<= ).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17'; Ergebnis:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Um daraus einen exklusiven Bereich zu machen, verwenden Sie das Größer-als-Zeichen (> ) Operator und kleiner als (< )-Operator.
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17'; Ergebnis:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Wenn Sie den BETWEEN verwenden müssen müssen Sie den Bereich entsprechend einschränken.
So:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16'; Ergebnis:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Numerische Werte verwenden
Die vorherigen Beispiele verwenden Datumsangaben, aber Sie sind nicht nur auf Datumsangaben beschränkt. Hier ist ein Beispiel, das numerische Werte verwendet.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3; Ergebnis:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
String-Werte verwenden
Wir könnten noch einen Schritt weiter gehen und BETWEEN verwenden um zwei String-Spalten zu vergleichen.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName; Ergebnis:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Sie müssen jedoch vorsichtig sein. Sie könnten denken, dass wir einfach den Anfangsbuchstaben verwenden könnten, etwa so:
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName; Aber das führt zu folgendem:
+---------+-------------+-----------+-----------+------------+ | 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 war nicht enthalten wie die vorherige Abfrage tat. Das liegt daran, dass BETWEEN betrachtet die ganze Saite. In diesem Fall Wag größer als W ist , und ist daher nicht in den Ergebnissen enthalten.