BETWEEN (Transact-SQL)
Gibt einen zu testenden Bereich an.
Syntax
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Argumente
test_expression
Der Ausdruck, für den getestet werden soll, ob er innerhalb des durch begin_expressionund end_expression definierten Bereichs liegt, test_expression muss vom gleichen Datentyp wie begin_expression und end_expression sein.NOT
Gibt an, dass das Ergebnis des Prädikats negiert wird.begin_expression
Ein gültiger Ausdruck. begin_expression muss vom gleichen Datentyp wie test_expression und end_expression sein.end_expression
Ein gültiger Ausdruck. end_expression muss vom gleichen Datentyp wie test_expression und begin_expression sein.AND
Dient als Platzhalter, der anzeigt, dass sich test_expression in dem durch begin_expression und end_expression angezeigten Bereich befinden soll.
Ergebnistypen
Boolean
Ergebniswert
BETWEEN gibt TRUE zurück, wenn der Wert von test_expression größer oder gleich dem Wert von begin_expression und kleiner oder gleich dem Wert von end_expression ist.
NOT BETWEEN gibt TRUE zurück, wenn der Wert von test_expression kleiner als der Wert von begin_expression oder größer als der Wert von end_expression ist.
Hinweise
Verwenden Sie die Operatoren Größer-als (>) und Kleiner-als (<), um einen Exklusivbereich anzugeben. Ist einer der Eingabewerte für das BETWEEN- oder NOT BETWEEN-Prädikat NULL, lautet das Ergebnis UNKNOWN.
Beispiele
A. Verwenden von BETWEEN
Im folgenden Beispiel werden die Angestellten von Adventure Works Cycles zurückgegeben, deren Stundensatz zwischen 27 und 30 liegt.
USE AdventureWorks;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.EmployeeID = ep.EmployeeID
WHERE ep.Rate BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO
Dies ist das Resultset.
FirstName LastName Rate
----------- ------------------ ------------------
Paula Barreto de Mattos 27.1394
Janaina Bueno 27.4038
Dan Bacon 27.4038
Ramesh Meyyappan 27.4038
Karen Berg 27.4038
David Bradley 28.7500
Hazem Abolrous 28.8462
Ovidiu Cracium 28.8462
Rob Walters 29.8462
Sheela Word 30.0000
(10 row(s) affected)
B. Verwenden von > und < anstelle von BETWEEN
Im folgenden Beispiel werden die Operatoren Größer-als (>) und Kleiner-als (<) verwendet. Da diese Operatoren die Bereichsgrenzen nicht einschließen, werden im Unterschied zu den zehn Zeilen des vorherigen Beispiels nur neun Zeilen zurückgegeben.
USE AdventureWorks;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.EmployeeID = ep.EmployeeID
WHERE ep.Rate > 27 AND ep.Rate < 30
ORDER BY ep.Rate;
GO
Dies ist das Resultset.
FirstName LastName Rate
--------- ------------------- ---------
Paula Barreto de Mattos 27.1394
Janaina Bueno 27.4038
Dan Bacon 27.4038
Ramesh Meyyappan 27.4038
Karen Berg 27.4038
David Bradley 28.7500
Hazem Abolrous 28.8462
Ovidiu Cracium 28.8462
Rob Walters 29.8462
(9 row(s) affected)
C. Verwenden von NOT BETWEEN
Im folgenden Beispiel werden alle Zeilen gesucht, die außerhalb des angegebenen Bereiches von 27 bis 30 liegen.
USE AdventureWorks;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.EmployeeID = ep.EmployeeID
WHERE ep.Rate NOT BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO
D. Verwenden von BETWEEN mit datetime-Werten
Im folgenden Beispiel werden Zeilen abgerufen, die datetime-Werte zwischen '19971212' und '19980105' (inklusiv) enthalten.
USE AdventureWorks
GO
SELECT EmployeeID, RateChangeDate
FROM HumanResources.EmployeePayHistory
WHERE RateChangeDate BETWEEN '19971212' AND '19980105'
Dies ist das Resultset.
EmployeeID RateChangeDate
----------- -----------------------
3 1997-12-12 00:00:00.000
4 1998-01-05 00:00:00.000
Durch die Abfrage werden die erwarteten Zeilen abgerufen, da die Datumswerte in der Abfrage und die datetime-Werte in der RateChangeDate-Spalte ohne den Zeitteil des Datums angegeben wurden. Wenn der Zeitteil nicht angegeben wird, wird standardmäßig 0:00 Uhr verwendet. Eine Zeile, die einen Zeitteil nach 0:00 Uhr am Datum 1998-01-05 enthält, würde von dieser Abfrage nicht zurückgegeben, da sie außerhalb des Bereichs liegt.