BETWEEN (Transact-SQL)
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-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 30
gevonden.
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.