Compartilhar via


BETWEEN (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Ponto de extremidade de análise de SQL no Microsoft FabricWarehouse no Microsoft FabricBanco de Dados SQL no Microsoft Fabric

Especifica um intervalo a ser testado.

Convenções de sintaxe de Transact-SQL

Sintaxe

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

Argumentos

test_expression

A expressão testar no intervalo definido por begin_expressione end_expression. test_expression precisa ser do mesmo tipo de dados que begin_expression e end_expression.

NOT

Especifica que o resultado do predicado é negado.

begin_expression

Qualquer expressão válida. begin_expression precisa ser do mesmo tipo de dados que test_expression e end_expression.

end_expression

Qualquer expressão válida. end_expression precisa ser do mesmo tipo de dados que test_expression e begin_expression.

AND

Atua como um espaço reservado que indica se test_expression deve estar dentro do intervalo indicado por begin_expression e end_expression.

Tipos de retorno

Booliano

Comentários

BETWEEN retornará TRUE se o valor de test_expression for maior ou igual ao valor de begin_expression e menor ou igual ao valor de end_expression.

NOT BETWEEN retornará TRUE se o valor de test_expression for menor que o valor de begin_expression ou maior que o valor de end_expression.

Para especificar um intervalo exclusivo, use os operadores maior que (>) e menor que (<). Se qualquer entrada no predicado BETWEEN ou NOT BETWEEN for NULL, o resultado dependerá dos resultados das partes constituintes.

No exemplo a seguir test_expression >= begin_expression AND test_expression <= end_expression, se uma das partes for FALSE, a expressão de BETWEEN geral será avaliada como FALSE. Caso contrário, a expressão será avaliada como UNKNOWN.

Exemplos

Os exemplos de código neste artigo usam o banco de dados de exemplo AdventureWorks2022 ou AdventureWorksDW2022, que você pode baixar na página inicial Microsoft SQL Server Samples and Community Projects.

a. Usar BETWEEN

O exemplo a seguir retorna informações sobre as funções de banco de dados em um banco de dados. A primeira consulta retorna todas as funções. O segundo exemplo usa a cláusula BETWEEN para limitar as funções aos valores database_id especificados.

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

Veja a seguir o conjunto de resultados.

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

Veja a seguir o conjunto de resultados.

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

B. Usar > e < em vez de BETWEEN

O exemplo a seguir usa operadores maiores que (>) e menores que (<) e, como esses operadores não são inclusivos, retorna nove linhas em vez de 10 que foram retornadas no exemplo anterior.

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

Veja a seguir o conjunto de resultados.

 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. Usar NOT BETWEEN

O exemplo a seguir localiza todas as linhas fora de um intervalo especificado de 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. Usar BETWEEN com valores de datetime

O exemplo a seguir recupera as linhas nas quais os valores de datetime estão entre 20011212 e 20020105, inclusivo.

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

Veja a seguir o conjunto de resultados.

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

A consulta recupera as linhas esperadas, pois os valores de data na consulta e o datetime valores armazenados na coluna RateChangeDate são especificados sem a parte de hora da data. Quando a parte de hora não é especificada, ela usa como padrão 12:00 da manhã. Uma linha que contém uma parte de tempo após as 00:00 em 5 de janeiro de 2002, não é retornada por essa consulta, pois está fora do intervalo.