Dela via


BETWEEN (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft FabricSQL-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 NULLberor 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.