Delen via


BETWEEN (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft FabricSQL-database in Microsoft Fabric

Hiermee geeft u een bereik te testen.

Transact-SQL syntaxisconventies

Syntaxis

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

Argumenten

test_expression

De -expressie om te testen in het bereik dat is gedefinieerd door begin_expressionen end_expression. test_expression moet hetzelfde gegevenstype zijn als zowel begin_expression als end_expression.

NIET

Hiermee geeft u op dat het resultaat van het predicaat wordt ontkend.

begin_expression

Elke geldige expressie. begin_expression moet hetzelfde gegevenstype zijn als zowel test_expression als end_expression.

end_expression

Elke geldige expressie. end_expression moet hetzelfde gegevenstype zijn als zowel test_expressionals begin_expression.

EN

Fungeert als tijdelijke aanduiding die aangeeft test_expression binnen het bereik moet liggen dat wordt aangegeven door begin_expression en end_expression.

Retourtypen

Booleaanse

Opmerkingen

BETWEEN retourneert TRUE als de waarde van test_expression groter is dan of gelijk is aan de waarde van begin_expression en kleiner dan of gelijk aan de waarde van end_expression.

NOT BETWEEN retourneert TRUE als de waarde van test_expression kleiner is dan de waarde van begin_expression of groter is dan de waarde van end_expression.

Als u een exclusief bereik wilt opgeven, gebruikt u de meer dan (>) en minder dan operators (<). Als invoer voor het predicaat BETWEEN of NOT BETWEEN predicaat is NULL, hangt het resultaat af van de resultaten van de samenstellende onderdelen.

In het volgende voorbeeld test_expression >= begin_expression AND test_expression <= end_expression, als een van beide onderdelen is FALSE, resulteert de algemene BETWEEN expressie in FALSE. Anders resulteert de expressie in UNKNOWN.

Voorbeelden

De codevoorbeelden in dit artikel gebruiken de AdventureWorks2022 of AdventureWorksDW2022 voorbeelddatabase, die u kunt downloaden van de Microsoft SQL Server-voorbeelden en communityprojecten startpagina.

Een. BETWEEN gebruiken

In het volgende voorbeeld wordt informatie geretourneerd over de databaserollen in een database. De eerste query retourneert alle rollen. In het tweede voorbeeld wordt de BETWEEN-component gebruikt om de rollen te beperken tot de opgegeven database_id waarden.

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

Dit is de resultatenset.

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

Dit is de resultatenset.

principal_id name
------------  ----
16385         db_accessadmin
16386         db_securityadmin
16387         db_ddladmin
16389         db_backupoperator
16390         db_datareader

B. Gebruik > en < in plaats van BETWEEN

In het volgende voorbeeld worden meer dan (>) en minder dan (<) operatoren gebruikt. Omdat deze operators niet inclusief zijn, worden negen rijen geretourneerd in plaats van 10 die in het vorige voorbeeld zijn geretourneerd.

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

Dit is de resultatenset.

 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. NOT BETWEEN gebruiken

In het volgende voorbeeld worden alle rijen buiten een opgegeven bereik van 27 door 30gevonden.

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. BETWEEN gebruiken met datum/tijd-waarden

In het volgende voorbeeld worden rijen opgehaald waarin datum/tijd- waarden liggen tussen 20011212 en 20020105, inclusief.

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

Dit is de resultatenset.

BusinessEntityID RateChangeDate
----------- -----------------------
3           2001-12-12 00:00:00.000
4           2002-01-05 00:00:00.000

De query haalt de verwachte rijen op, omdat de datumwaarden in de query en de datum/tijd- waarden die zijn opgeslagen in de RateChangeDate kolom worden opgegeven zonder het tijdgedeelte van de datum. Wanneer het tijdgedeelte niet is opgegeven, wordt deze standaard ingesteld op 12:00 uur. Een rij met een tijdgedeelte na 12:00 uur op 5 januari 2002 wordt niet geretourneerd door deze query, omdat deze buiten het bereik valt.