BETWEEN (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
koncový bod SQL Analytics ve službě Microsoft Fabric
Warehouse v Microsoft Fabric
databáze SQL v Microsoft Fabric
Určuje rozsah, který se má testovat.
Syntax
test_expression [ NOT ] BETWEEN begin_expression AND end_expression
Argumenty
test_expression
Výraz testovat v rozsahu definovaném begin_expressiona end_expression. test_expression musí být stejný datový typ jako begin_expression i end_expression.
NE
Určuje, že výsledek predikátu je negovaný.
begin_expression
Libovolný platný výraz. begin_expression musí být stejný datový typ jako test_expression i end_expression.
end_expression
Libovolný platný výraz. end_expression musí být stejný datový typ jako test_expressioni begin_expression.
A
Funguje jako zástupný symbol, který označuje, test_expression by měl být v rozsahu uvedeném begin_expression a end_expression.
Návratové typy
logických
Poznámky
BETWEEN
vrátí TRUE
, pokud je hodnota test_expression větší nebo rovna hodnotě begin_expression a menší nebo rovna hodnotě end_expression.
NOT BETWEEN
vrátí TRUE
pokud je hodnota test_expression menší než hodnota begin_expression nebo větší než hodnota end_expression.
Chcete-li zadat výhradní rozsah, použijte větší než (>
) a menší než operátory (<
). Pokud je jakýkoli vstup do BETWEEN
nebo NOT BETWEEN
predikátu NULL
, výsledek závisí na výsledcích složek.
V následujícím příkladu test_expression >= begin_expression AND test_expression <= end_expression
, pokud je FALSE
některé části, pak se celkový výraz BETWEEN
vyhodnotí jako FALSE
. V opačném případě se výraz vyhodnotí jako UNKNOWN
.
Příklady
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2022
nebo AdventureWorksDW2022
, kterou si můžete stáhnout z domovské stránky ukázky a komunitní projekty Microsoft SQL Serveru.
A. Použití FUNKCE BETWEEN
Následující příklad vrátí informace o databázových rolích v databázi. První dotaz vrátí všechny role. Druhý příklad používá klauzuli BETWEEN
k omezení rolí na zadané database_id
hodnoty.
SELECT principal_id,
name
FROM sys.database_principals
WHERE type = 'R';
Tady je sada výsledků.
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
Tady je sada výsledků.
principal_id name
------------ ----
16385 db_accessadmin
16386 db_securityadmin
16387 db_ddladmin
16389 db_backupoperator
16390 db_datareader
B. Místo funkce BETWEEN používejte >
a <
.
Následující příklad používá operátory větší než (>
) a menší než (<
) a protože tyto operátory nejsou inkluzivní, vrátí místo 10 řádků, které byly vráceny v předchozím příkladu, devět řádků.
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
Tady je sada výsledků.
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. Použití FUNKCE NOT BETWEEN
Následující příklad najde všechny řádky mimo zadanou oblast 27
až 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. Použití funkce BETWEEN s hodnotami datetime
Následující příklad načte řádky, ve kterých hodnoty datetime jsou mezi 20011212
a 20020105
včetně.
SELECT BusinessEntityID,
RateChangeDate
FROM HumanResources.EmployeePayHistory
WHERE RateChangeDate BETWEEN '20011212' AND '20020105';
Tady je sada výsledků.
BusinessEntityID RateChangeDate
----------- -----------------------
3 2001-12-12 00:00:00.000
4 2002-01-05 00:00:00.000
Dotaz načte očekávané řádky, protože hodnoty kalendářních dat v dotazu a hodnoty datetime uložené ve sloupci RateChangeDate
jsou zadány bez časové části data. Pokud není zadaná časová část, výchozí hodnota je 12:00. Tento dotaz nevrácí řádek, který je po 12:00 5. ledna 2002, není vrácený tímto dotazem, protože spadá mimo rozsah.
Související obsah
- > (větší než) (Transact-SQL)
- < (menší než) (Transact-SQL)
- výrazy (Transact-SQL)
- Jaké jsou funkce databáze SQL?
- operátory (Transact-SQL)
- SELECT (Transact-SQL)
- WHERE (Transact-SQL)