Compartilhar via


BETWEEN (Transact-SQL)

Especifica um intervalo a ser testado.

Ícone de vínculo de tópicoConvenções de sintaxe 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_expressione end_expression. test_expression deve ter o mesmo tipo de dados para begin_expression e end_expression.

  • NOT
    Especifica que o resultado do predicado deve ser negado.

  • begin_expression
    É qualquer expressão válida. begin_expression deve ter o mesmo tipo de dados que test_expression e end_expression.

  • end_expression
    É qualquer expressão válida. end_expression deve ter o mesmo tipo de dados que test_expressione begin_expression.

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

Tipos de resultado

Boolean

Valor do resultado

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

NOT BETWEEN retorna 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 os funcionários do Ciclos da Adventure Works com taxa de pagamento por hora entre 27 e 30.

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

Aqui está o conjunto de resultados.

FirstName LastName Rate

----------- ------------------ ------------------

Paula Barreto de Mattos 27.1394

Karen Berg 27.4038

Ramesh Meyyappan 27.4038

Dan Bacon 27.4038

Janaina Bueno 27.4038

David Bradley 28.7500

Hazem Abolrous 28.8462

Ovidiu Cracium 28.8462

Rob Walters 29.8462

Sheela Word 30.0000

(10 row(s) affected)

B. Usando > 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.

USE AdventureWorks2008R2;
GO

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

Aqui está 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

(9 row(s) affected)

C. Usando NOT BETWEEN

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

USE AdventureWorks2008R2;
GO
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 datetime estão entre '19971212' e '19980105', inclusive.

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

Aqui está 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 datetime armazenados na coluna RateChangeDate foram especificados sem a parte da hora da data. Quando a parte de hora não é especificada, o padrão é 12:00. Observe que uma linha contendo uma parte da hora após as 12:00 em 1998-0105 não deve ser retornada por essa consulta porque está fora do intervalo.