BETWEEN (Transact-SQL)

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punto de conexión de análisis SQL en Microsoft FabricAlmacenamiento en Microsoft Fabric

Especifica un intervalo que se va a probar.

Convenciones de sintaxis de Transact-SQL

Sintaxis

test_expression [ NOT ] BETWEEN begin_expression AND end_expression  

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

test_expression
Es la expresión que se va a probar en el intervalo definido por begin_expression y 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
Es cualquier expresión válida. begin_expression debe tener el mismo tipo de datos que test_expression y end_expression.

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

y
Actúa como un marcador de posición que indica que test_expression debe encontrarse 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, use 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 ejemplo siguiente se devuelve información sobre los roles de base de datos de una de base de datos. La primera consulta devuelve todos los roles. En el segundo ejemplo se usa la cláusula BETWEEN para limitar los roles a los 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  

El conjunto de resultados es el siguiente:

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

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

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  

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.

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

-- Uses AdventureWorks  
  
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 las 00:00 en 2002-01-05, ya que está fuera del intervalo.

Consulte también

> (Mayor que) (Transact-SQL)
< (Menor que) (Transact-SQL)
Expresiones (Transact-SQL)
Funciones integradas (Transact-SQL)
Operadores (Transact-SQL)
SELECT (Transact-SQL)
WHERE (Transact-SQL)