BETWEEN (Transact-SQL)
Gilt für: SQL Server
Azure SQL-Datenbank
Azure SQL verwaltete Instanz
Azure Synapse Analytics
Platform System (PDW)
SQL Analytics Platform-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric Warehouse
Gibt einen zu testenden Bereich an.
Transact-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 (12.x) und 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)