BETWEEN (Transact-SQL)
Gibt einen zu testenden Bereich an.
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.
A. Verwenden von BETWEEN
Im folgenden Beispiel werden die Angestellten von Adventure Works Cycles zurückgegeben, deren Stundensatz zwischen 27 und 30 liegt.
USE AdventureWorks2008R2;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.BusinessEntityID = ep.BusinessEntityID
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
Karen Berg 27.4038
Ramesh Meyyappan 27.4038
Dan Bacon 27.4038
Janaina Bueno 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 AdventureWorks2008R2;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.BusinessEntityID = ep.BusinessEntityID
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 Bereichs von 27 bis 30 liegen.
USE AdventureWorks2008R2;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e
JOIN HumanResources.EmployeePayHistory ep
ON e.BusinessEntityID = ep.BusinessEntityID
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' (einschließlich) enthalten.
USE AdventureWorks2008R2; GO SELECT BusinessEntityID, RateChangeDate FROM HumanResources.EmployeePayHistory WHERE RateChangeDate BETWEEN '20011212' AND '20020105'
Dies ist das Resultset.
BusinessEntityID RateChangeDate
----------- -----------------------
3 2001-12-12 00:00:00.000
4 2002-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 späteren Zeitteil als 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.