Udostępnij za pośrednictwem


BETWEEN (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)punkt końcowy analizy SQL w usłudze Microsoft FabricWarehouse w usłudze Microsoft FabricSQL Database w usłudze Microsoft Fabric

Określa zakres do przetestowania.

Transact-SQL konwencje składni

Składnia

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

Argumenty

test_expression

Wyrażenie do testowania w zakresie zdefiniowanym przez begin_expressioni end_expression. test_expression musi być tym samym typem danych co zarówno begin_expression, jak i end_expression.

NIE

Określa, że wynik predykatu jest negowany.

begin_expression

Dowolne prawidłowe wyrażenie. begin_expression musi być tym samym typem danych co zarówno test_expression, jak i end_expression.

end_expression

Dowolne prawidłowe wyrażenie. end_expression musi być tym samym typem danych co zarówno test_expression, jak i begin_expression.

I

Działa jako symbol zastępczy, który wskazuje, test_expression powinien znajdować się w zakresie wskazywanym przez begin_expression i end_expression.

Typy zwracane

logiczne

Uwagi

BETWEEN zwraca TRUE, jeśli wartość test_expression jest większa lub równa wartości begin_expression i mniejszej lub równej wartości end_expression.

NOT BETWEEN zwraca wartość TRUE, jeśli wartość test_expression jest mniejsza niż wartość begin_expression lub większa niż wartość end_expression.

Aby określić zakres wyłączny, użyj większego niż (>) i mniejszego niż operatory (<). Jeśli jakiekolwiek dane wejściowe do predykatu BETWEEN lub NOT BETWEENNULL, wynik zależy od wyników części składowych.

W poniższym przykładzie test_expression >= begin_expression AND test_expression <= end_expression, jeśli którakolwiek część jest FALSE, ogólne wyrażenie BETWEEN daje FALSE. W przeciwnym razie wyrażenie oblicza wartość UNKNOWN.

Przykłady

Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2022 lub AdventureWorksDW2022, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.

A. Używanie funkcji BETWEEN

Poniższy przykład zwraca informacje o rolach bazy danych w bazie danych. Pierwsze zapytanie zwraca wszystkie role. W drugim przykładzie użyto klauzuli BETWEEN, aby ograniczyć role do określonych wartości database_id.

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

Oto zestaw wyników.

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

Oto zestaw wyników.

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

B. Użyj > i < zamiast między

W poniższym przykładzie użyto operatorów większej niż (>) i mniejszej niż (<), a ponieważ te operatory nie są włącznie, zwraca dziewięć wierszy zamiast 10, które zostały zwrócone w poprzednim przykładzie.

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

Oto zestaw wyników.

 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. Użyj NOT BETWEEN

W poniższym przykładzie wszystkie wiersze znajdują się poza określonym zakresem 27 za pośrednictwem 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. Używanie funkcji BETWEEN z wartościami daty/godziny

Poniższy przykład pobiera wiersze, w których wartości data/godzina znajdują się między 20011212 a 20020105włącznie.

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

Oto zestaw wyników.

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

Zapytanie pobiera oczekiwane wiersze, ponieważ wartości daty w zapytaniu i wartości daty/godziny przechowywane w kolumnie RateChangeDate są określane bez części godziny daty. Gdy część czasowa jest nieokreślona, wartość domyślna to 12:00. Wiersz zawierający część czasową, która znajduje się po godzinie 12:00 w dniu 5 stycznia 2002 r., nie jest zwracana przez to zapytanie, ponieważ znajduje się poza zakresem.