sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo usar el operador BETWEEN en SQL Server

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