BETWEEN (Transact-SQL)
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-Analyseendpunkt in Microsoft FabricWarehouse in Microsoft FabricSQL-Datenbank in Microsoft Fabric
Gibt einen zu testenden Bereich an.
Transact-SQL-Syntaxkonventionen
Syntax
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Argumente
test_expression
Der Ausdruck, auf den im durch begin_expressionund end_expressiondefinierten Bereich zu testen ist. 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
Ein beliebiger gültiger Ausdruck. begin_expression muss denselben Datentyp wie test_expression und end_expression aufweisen.
end_expression
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.
Rückgabetypen
Boolescher Wert
Bemerkungen
BETWEEN
gibt TRUE
zurück, wenn der Wert von test_expression größer oder gleich dem Wert von begin_expression und kleiner als oder gleich dem Wert von end_expressionist.
NOT BETWEEN
gibt TRUE
zurück, wenn der Wert von test_expression kleiner als der Wert begin_expression oder größer als der Wert von end_expressionist.
Verwenden Sie die Operatoren Größer-als (>
) und Kleiner-als (<
), um einen Exklusivbereich anzugeben. Wenn ein Eingaben für das BETWEEN
oder NOT BETWEEN
Prädikat NULL
ist, hängt das Ergebnis von den Ergebnissen der Bestandteile ab.
Im folgenden Beispiel test_expression >= begin_expression AND test_expression <= end_expression
, wenn ein Teil FALSE
ist, wird der gesamte BETWEEN
Ausdruck als FALSE
ausgewertet. Andernfalls wird der Ausdruck als UNKNOWN
ausgewertet.
Beispiele
Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2022
- oder AdventureWorksDW2022
Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.
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';
Hier sehen Sie das Ergebnis.
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
SELECT principal_id,
name
FROM sys.database_principals
WHERE type = 'R'
AND principal_id BETWEEN 16385 AND 16390;
GO
Hier sehen Sie das Ergebnis.
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 operatoren größer als (>
) und kleiner als (<
) verwendet. Da diese Operatoren nicht einschließlich sind, werden neun Zeilen anstelle von 10 zurückgegeben, die im vorherigen Beispiel zurückgegeben wurden.
SELECT e.FirstName,
e.LastName,
ep.Rate
FROM HumanResources.vEmployee AS e
INNER JOIN HumanResources.EmployeePayHistory AS ep
ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate > 27
AND ep.Rate < 30
ORDER BY ep.Rate;
GO
Hier sehen Sie das Ergebnis.
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. NICHT ZWISCHEN VERWENDEN
Im folgenden Beispiel werden alle Zeilen gesucht, die außerhalb des angegebenen Bereiches von 27
bis 30
liegen.
SELECT e.FirstName,
e.LastName,
ep.Rate
FROM HumanResources.vEmployee AS e
INNER JOIN HumanResources.EmployeePayHistory AS ep
ON e.BusinessEntityID = ep.BusinessEntityID
WHERE ep.Rate NOT BETWEEN 27 AND 30
ORDER BY ep.Rate;
GO
D: Verwenden von BETWEEN mit Datums-/Uhrzeitwerten
Im folgenden Beispiel werden Zeilen abgerufen, die datetime-Werte zwischen 20011212
und 20020105
(inklusiv) enthalten.
SELECT BusinessEntityID,
RateChangeDate
FROM HumanResources.EmployeePayHistory
WHERE RateChangeDate BETWEEN '20011212' AND '20020105';
Hier sehen Sie das Ergebnis.
BusinessEntityID RateChangeDate
----------- -----------------------
3 2001-12-12 00:00:00.000
4 2002-01-05 00:00:00.000
Die Abfrage ruft die erwarteten Zeilen ab, da die Datumswerte in der Abfrage und die in der RateChangeDate
Spalte gespeicherten datumstime- Werte ohne den Zeitteil des Datums angegeben werden. Wenn der Zeitteil nicht angegeben ist, wird er standardmäßig auf 12:00 Uhr festgelegt. Eine Zeile, die einen Zeitteil enthält, der am 5. Januar 2002 nach 12:00 Uhr liegt, wird von dieser Abfrage nicht zurückgegeben, da sie außerhalb des Bereichs liegt.