Compartilhar via


BETWEEN (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse 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 a ser testada no intervalo definido por begin_expression e end_expression. test_expression precisa ser do mesmo tipo de dados que begin_expression e end_expression.

NOT
Especifica que o resultado do predicado deve ser 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 resultado

Booliano

Valor do resultado

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 .

Comentários

Para especificar um intervalo exclusivo, use os operadores maior que (>) e menor que (<). Se qualquer entrada para o predicado BETWEEN ou NOT BETWEEN for NULL, o resultado será UNKNOWN.

Exemplos

a. Usando 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';

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
------------  ---- 
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
principal_id	name
------------  ---- 
16385	        db_accessadmin
16386	        db_securityadmin
16387	        db_ddladmin
16389	        db_backupoperator
16390	        db_datareader

B. Como usar > e < em vez de BETWEEN

O exemplo a seguir usa os operadores maior que (>) e menor que (<) e, como esses operadores não são inclusivos, retorna nove linhas em vez das dez retornadas no exemplo anterior.

-- Uses AdventureWorks  
  
SELECT e.FirstName, e.LastName, ep.Rate  
FROM HumanResources.vEmployee e   
JOIN HumanResources.EmployeePayHistory 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. Usando NOT BETWEEN

O exemplo a seguir localiza todas as linhas fora de um intervalo especificado de 27 a 30.

-- Uses AdventureWorks  
  
SELECT e.FirstName, e.LastName, ep.Rate  
FROM HumanResources.vEmployee e   
JOIN HumanResources.EmployeePayHistory ep   
    ON e.BusinessEntityID = ep.BusinessEntityID  
WHERE ep.Rate NOT BETWEEN 27 AND 30  
ORDER BY ep.Rate;  
GO  

D. Usando BETWEEN com valores de data e hora

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

-- Uses AdventureWorks  
  
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 porque os valores de data na consulta e os valores de datetime armazenados na coluna RateChangeDate foram especificados sem a parte de hora da data. Quando a parte de hora não for especificada, ela será padronizada para 00:00. Observe que uma linha que contém uma parte de tempo após as 00:00 em 05/01/2002 não seria retornada por essa consulta porque ela fica fora do intervalo.

Consulte Também

> (Maior que) (Transact-SQL)
< (Menor que) (Transact-SQL)
Expressões (Transact-SQL)
Funções internas (Transact-SQL)
Operadores (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)