BETWEEN (Transact-SQL)
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
SQL-databas i Microsoft Fabric
Anger ett intervall som ska testas.
Transact-SQL syntaxkonventioner
Syntax
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Argument
test_expression
Det uttryck som att testa för i intervallet som definieras av begin_expressionoch end_expression. test_expression måste ha samma datatyp som både begin_expression och end_expression.
INTE
Anger att resultatet av predikatet negeras.
begin_expression
Valfritt giltigt uttryck. begin_expression måste vara samma datatyp som både test_expression och end_expression.
end_expression
Valfritt giltigt uttryck. end_expression måste ha samma datatyp som både test_expressionoch begin_expression.
OCH
Fungerar som platshållare som anger att test_expression ska ligga inom det intervall som anges av begin_expression och end_expression.
Returtyper
boolesk
Anmärkningar
BETWEEN
returnerar TRUE
om värdet för test_expression är större än eller lika med värdet för begin_expression och mindre än eller lika med värdet för end_expression.
NOT BETWEEN
returnerar TRUE
om värdet för test_expression är mindre än värdet för begin_expression eller större än värdet för end_expression.
Om du vill ange ett exklusivt intervall använder du operatorerna större än (>
) och mindre än (<
). Om någon indata till BETWEEN
eller NOT BETWEEN
predikat är NULL
beror resultatet på resultatet av de ingående delarna.
I följande exempel test_expression >= begin_expression AND test_expression <= end_expression
, om någon av delarna är FALSE
utvärderas det övergripande BETWEEN
-uttrycket till FALSE
. Annars utvärderas uttrycket till UNKNOWN
.
Exempel
Kodexemplen i den här artikeln använder AdventureWorks2022
- eller AdventureWorksDW2022
-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Använd BETWEEN
I följande exempel returneras information om databasrollerna i en databas. Den första frågan returnerar alla roller. I det andra exemplet används BETWEEN
-satsen för att begränsa rollerna till angivna database_id
värden.
SELECT principal_id,
name
FROM sys.database_principals
WHERE type = 'R';
Här är resultatuppsättningen.
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
Här är resultatuppsättningen.
principal_id name
------------ ----
16385 db_accessadmin
16386 db_securityadmin
16387 db_ddladmin
16389 db_backupoperator
16390 db_datareader
B. Använd >
och <
i stället för BETWEEN
I följande exempel används operatorer som är större än (>
) och mindre än (<
) och, eftersom dessa operatorer inte är inkluderande, returnerar nio rader i stället för 10 som returnerades i föregående exempel.
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
Här är resultatuppsättningen.
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. Använd INTE MELLAN
I följande exempel hittas alla rader utanför ett angivet intervall med 27
via 30
.
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. Använda BETWEEN med datetime-värden
I följande exempel hämtas rader där datetime- värden ligger mellan 20011212
och 20020105
, inklusive.
SELECT BusinessEntityID,
RateChangeDate
FROM HumanResources.EmployeePayHistory
WHERE RateChangeDate BETWEEN '20011212' AND '20020105';
Här är resultatuppsättningen.
BusinessEntityID RateChangeDate
----------- -----------------------
3 2001-12-12 00:00:00.000
4 2002-01-05 00:00:00.000
Frågan hämtar de förväntade raderna eftersom datumvärdena i frågan och datetime värden som lagras i kolumnen RateChangeDate
anges utan tidsdelen av datumet. När tidsdelen är ospecificerad är den som standard 12:00. En rad som innehåller en tidsdel som är efter 12:00 den 5 januari 2002 returneras inte av den här frågan eftersom den ligger utanför intervallet.