BETWEEN (Transact-SQL)

Gilt für: SQL Server (alle unterstützten Versionen) Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Gibt einen zu testenden Bereich an.

ThemenlinksymbolTransact-SQL-Syntaxkonventionen

Syntax

test_expression [ NOT ] BETWEEN begin_expression AND end_expression  

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 oder früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

test_expression
Ist der Ausdruck, auf den hin in dem Bereich getestet werden soll, von begin_expression und end_expression definiert, muss test_expression denselben Datentyp wie begin_expression und end_expression aufweisen.

NICHT
Gibt an, dass das Ergebnis des Prädikats negiert wird.

begin_expression
Ist ein beliebiger gültiger Ausdruck. begin_expression muss denselben Datentyp wie test_expression und end_expression aufweisen.

end_expression
Ist ein beliebiger gültiger Ausdruck. end_expression muss denselben Datentyp wie test_expression und begin_expression aufweisen.

UND
Fungiert als Platzhalter, der angibt, dass sich test_expression innerhalb des von begin_expression und end_expression angegebenen Bereichs befinden sollte.

Ergebnistypen

Boolescher Wert

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 und größer als der Wert von end_expression ist.

Bemerkungen

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 Informationen zu den Datenbankgruppen in einer Datenbank zurückgegeben. Die erste Abfrage gibt alle Rollen zurück. Im zweiten Beispiel werden die Rollen mithilfe der BETWEEN-Klausel auf die angegebenen database_id Werte beschränkt.

SELECT principal_id, name 
FROM sys.database_principals
WHERE type = 'R';

SELECT principal_id, name 
FROM sys.database_principals
WHERE type = 'R'
AND principal_id BETWEEN 16385 AND 16390;
GO  

Hier ist das Resultset.

principal_id	name
------------  ---- 
0	            public
16384	        db_owner
16385	        db_accessadmin
16386	        db_securityadmin
16387	        db_ddladmin
16389	        db_backupoperator
16390	        db_datareader
16391	        db_datawriter
16392	        db_denydatareader
16393	        db_denydatawriter
principal_id	name
------------  ---- 
16385	        db_accessadmin
16386	        db_securityadmin
16387	        db_ddladmin
16389	        db_backupoperator
16390	        db_datareader

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.

-- Uses AdventureWorks  
  
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  

Hier 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  

C. Verwenden von NOT BETWEEN

Im folgenden Beispiel werden alle Zeilen gesucht, die außerhalb des angegebenen Bereiches von 27 bis 30 liegen.

-- Uses AdventureWorks  
  
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 '20011212' und '20020105' (inklusiv) enthalten.

-- Uses AdventureWorks  
  
SELECT BusinessEntityID, RateChangeDate  
FROM HumanResources.EmployeePayHistory  
WHERE RateChangeDate BETWEEN '20011212' AND '20020105';  

Hier 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 Zeitteil nach 0:00 Uhr am Datum 2002-01-05 enthält, würde von dieser Abfrage nicht zurückgegeben, da sie außerhalb des Bereichs liegt.

Weitere Informationen

> (Größer als) (Transact-SQL)
< (Kleiner als) (Transact-SQL)
Ausdrücke (Transact-SQL)
Integrierte Funktionen (Transact-SQL)
Operatoren (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)