El servidor SQL BETWEEN
El operador le permite probar entre un rango de valores en sus consultas. Por ejemplo, podría probar que un valor está entre dos números.
El BETWEEN
El operador es inclusivo, lo que significa que incluye los valores que especifique dentro del rango. Es decir, incluye valores que son mayores o iguales que el valor más bajo y valores que son menores o iguales que el valor más alto. Por lo tanto, es como usar >=
y <=
.
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;
Resultado:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
Como se mencionó, BETWEEN
es inclusivo, por lo que el resultado incluye los dos valores que especifiqué a la izquierda y a la derecha de AND
argumento.
Esto es el equivalente a hacer lo siguiente.
SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;
Resultado:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
NOT BETWEEN
Puedes usar el NOT
argumento para especificar que el valor no estar entre los dos valores especificados.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;
Resultado:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Esta vez obtenemos el mismo resultado que obtendríamos si hubiéramos usado los operadores menor que y mayor que.
SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;
Resultado:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Al usar NOT BETWEEN
, si quisiéramos incluir los valores especificados en la prueba, tendríamos que incrementar/disminuir los valores.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;
Resultado:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Esta vez vemos que se agregan dos ciudades a nuestro conjunto de resultados; Fakaofo con una población de 300 y Shanghai con una población de 9696300.
Por cierto, todos estos son datos de muestra antiguos, por lo que las cifras de población probablemente no reflejen la realidad real en muchos casos.
Así es como lo haríamos con los operadores Menor que o igual a y Mayor que o igual a.
SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;
Resultado:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
BETWEEN
con fechas
Cuando usas BETWEEN
operador en fechas (como datetime , fechahora2 o datetimeoffset valores), es mejor usar el formato YYYYMMDD
para evitar problemas de configuración regional (por ejemplo, si el usuario ha cambiado el formato de fecha de su sesión).
Además, si no proporciona el componente de hora, el valor predeterminado es 12:00 a.m.
Por lo tanto, la siguiente consulta no devolvería ninguna fila que contenga una parte de la hora después de las 12:00 a. m. el 1973-12-31.
SELECT * FROM Artists
WHERE ActiveFrom BETWEEN '20010101' AND '20011231';
Puede ajustar sus valores de fecha en consecuencia, o puede preferir usar los operadores Mayor que o Igual que y Menor que.
Así:
SELECT * FROM Artists
WHERE ActiveFrom >= '20010101' AND ActiveFrom < '20011231';