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 da Adventure Works Cycles que têm uma taxa de pagamento por hora entre 27 e 30.

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

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
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 AdventureWorks;
GO

SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e 
JOIN HumanResources.EmployeePayHistory ep 
    ON e.EmployeeID = ep.EmployeeID
WHERE ep.Rate > 27 AND ep.Rate < 30
ORDER BY ep.Rate;
GO

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 AdventureWorks;
GO
SELECT e.FirstName, e.LastName, ep.Rate
FROM HumanResources.vEmployee e 
JOIN HumanResources.EmployeePayHistory ep 
    ON e.EmployeeID = ep.EmployeeID
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 AdventureWorks
GO
SELECT EmployeeID, RateChangeDate
FROM HumanResources.EmployeePayHistory
WHERE RateChangeDate BETWEEN '19971212' AND '19980105'

Conjunto de resultados.

 EmployeeID RateChangeDate
----------- -----------------------
          3 1997-12-12 00:00:00.000
          4 1998-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.