Sdílet prostřednictvím


BETWEEN (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)koncový bod SQL Analytics ve službě Microsoft FabricWarehouse v Microsoft Fabricdatabáze SQL v Microsoft Fabric

Určuje rozsah, který se má testovat.

Transact-SQL konvence syntaxe

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 2730.

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.