BETWEEN (Transact-SQL)

Gibt einen zu testenden Bereich an.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

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.