Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad 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
Arguments
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.
NOT
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.
AND
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
Boolean
Remarks
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.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky ukázky a komunitní projekty Microsoft SQL Serveru.
A. Použití 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 20020105vč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)
- KDE (Transact-SQL)