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.