BETWEEN (Transact-SQL)

Especifica un intervalo que se va a probar.

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL

Sintaxis

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

Argumentos

  • test_expression
    Es la expresión que se va a probar en el rango definido por begin_expressiony end_expression. test_expression debe tener el mismo tipo de datos que begin_expression y end_expression.

  • NOT
    Especifica que se niega el resultado del predicado.

  • begin_expression
    Cualquier expresión válida. begin_expression debe tener el mismo tipo de datos que test_expression y end_expression.

  • end_expression
    Cualquier expresión válida. end_expression debe tener el mismo tipo de datos que test_expressiony begin_expression.

  • AND
    Actúa como un marcador de posición que indica que test_expression debe estar dentro del intervalo indicado por begin_expression y end_expression.

Tipos de resultado

Boolean

Valor del resultado

BETWEEN devuelve TRUE si el valor de test_expression es mayor o igual que el valor de begin_expression y menor o igual que el valor de end_expression.

NOT BETWEEN devuelve TRUE si el valor de test_expression es menor que el valor de begin_expression y mayor que el valor de end_expression.

Comentarios

Para especificar un intervalo exclusivo, utilice los operadores mayor que (>) y menor que (<). Si alguna entrada del predicado BETWEEN o NOT BETWEEN es NULL, el resultado es UNKNOWN.

Ejemplos

A.Utilizar BETWEEN

En el siguiente ejemplo se devuelven los empleados de Adventure Works Cycles cuya tarifa por hora se encuentra entre 27 y 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

El conjunto de resultados es el siguiente.

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.Utilizar > y < en lugar de BETWEEN

En el siguiente ejemplo se utilizan los operadores mayor que (>) y menor que (<) y, puesto que dichos operadores no son inclusivos, se devuelven nueve filas en lugar de las diez devueltas en el ejemplo 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

El conjunto de resultados es el siguiente.

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

En el siguiente ejemplo se buscan todas las filas que no están incluidas en un 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.Utilizar BETWEEN con valores datetime

En el siguiente ejemplo se recuperan filas en las que los valores datetime están entre '20011212' y '20020105', ambos incluidos.

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

El conjunto de resultados es el siguiente.

BusinessEntityID RateChangeDate

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

3           2001-12-12 00:00:00.000

4           2002-01-05 00:00:00.000

La consulta recupera las filas previstas porque los valores de fecha de la consulta y los valores de datetime almacenados en la columna RateChangeDate se han especificado sin la parte de hora de la fecha. Si no se especifica la parte de hora, toma el valor predeterminado 12:00 a.m. Tenga en cuenta que esta consulta no devolverá una fila que contenga una parte de hora posterior a 12:00 a.m. del 05-01-2002, ya que está fuera del rango.

Vea también

Referencia

> (Mayor que) (Transact-SQL)

< (Menor que) Transact-SQL)

Expresiones (Transact-SQL)

Funciones integradas (Transact-SQL)

Operadores (Transact-SQL)

SELECT (Transact-SQL)

WHERE (Transact-SQL)