Compartilhar via


BETWEEN (Transact-SQL)

Especifica um intervalo a ser testado.

Ícone de vínculo de tópico Convenções da 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 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 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 AdventureWorks2012;
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 AdventureWorks2012;
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 AdventureWorks2012;
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 '20011212' e '20020105', inclusive.

USE AdventureWorks2012;
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 que contém uma parte de hora posterior a 00h00 em 2002-01-05 não será retornada por essa consulta porque está fora do intervalo.

Consulte também

Referência

> (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)