Compartir a través de


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 FabricWarehouse en Microsoft FabricBase de datos SQL de 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

Argumentos

test_expression

La expresión para probar en el intervalo definido por begin_expressiony end_expression. test_expression debe tener el mismo tipo de datos que begin_expression y end_expression.

NOT

Especifica que el resultado del predicado se niega.

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

Boolean

Comentarios

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 o mayor que el valor de end_expression.

Para especificar un intervalo exclusivo, use los operadores "mayor que" (>) y "menor que" (<). Si alguna entrada en el predicado BETWEEN o NOT BETWEEN es NULL, el resultado depende de los resultados de las partes constituyentes.

En el ejemplo siguiente test_expression >= begin_expression AND test_expression <= end_expression, si alguna de las partes está FALSE, la expresión BETWEEN general se evalúa como FALSE. De lo contrario, la expresión se evalúa como UNKNOWN.

Ejemplos

Los ejemplos de código de este artículo usan la base de datos de ejemplo de AdventureWorks2022 o AdventureWorksDW2022, que puede descargar de la página principal de ejemplos de Microsoft SQL Server y proyectos de comunidad.

A. Usar 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';

Este es el conjunto de resultados.

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
SELECT principal_id,
       name
FROM sys.database_principals
WHERE type = 'R'
      AND principal_id BETWEEN 16385 AND 16390;
GO

Este es el conjunto de resultados.

principal_id name
------------  ----
16385         db_accessadmin
16386         db_securityadmin
16387         db_ddladmin
16389         db_backupoperator
16390         db_datareader

B. Usar > y < en lugar de BETWEEN

En el ejemplo siguiente se usa mayor que (>) y menos de (<) y, dado que estos operadores no son inclusivos, devuelve nueve filas en lugar de 10 que se devolvieron en el ejemplo anterior.

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

Este es el 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

C. Usar NOT BETWEEN

En el siguiente ejemplo se buscan todas las filas que no están incluidas en un intervalo especificado de 27 a 30.

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

D. Uso de 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.

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

Este es el conjunto de resultados.

BusinessEntityID RateChangeDate
----------- -----------------------
3           2001-12-12 00:00:00.000
4           2002-01-05 00:00:00.000

La consulta recupera las filas esperadas, ya que los valores de fecha de la consulta y los valores de datetime almacenados en la columna RateChangeDate se especifican sin la parte de hora de la fecha. Cuando el elemento de hora no está especificado, el valor predeterminado es 12:00 A.M. Esta consulta no devuelve una fila que contiene una parte de tiempo después de las 12:00 A.M. el 5 de enero de 2002, porque está fuera del intervalo.