Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como usar o operador BETWEEN no SQL Server


O SQL Server BETWEEN O operador permite que você teste entre um intervalo de valores em suas consultas. Por exemplo, você pode testar se um valor está entre dois números.

O BETWEEN O operador é inclusivo, o que significa que inclui os valores que você especifica dentro do intervalo. Ou seja, inclui valores maiores ou iguais ao valor inferior e valores menores ou iguais ao valor superior. Portanto, é como usar >= e <= .

Exemplo


Aqui está um exemplo para demonstrar.
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 mencionado, BETWEEN é inclusivo, portanto, o resultado inclui os dois valores que especifiquei à esquerda e à direita do AND argumento.

Isso é o equivalente a fazer o seguinte.
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


Você pode usar o NOT argumento para especificar que o valor deve não estar entre os dois 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     |
+-----------------+--------------+

Desta vez, obtemos o mesmo resultado que obteríamos se usássemos os operadores menor que e maior 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     |
+-----------------+--------------+

Ao usar NOT BETWEEN , se quiséssemos incluir os valores especificados no teste, precisaríamos aumentar/diminuir os 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     |
+-----------------+--------------+

Desta vez, vemos que duas cidades são adicionadas ao nosso conjunto de resultados; Fakaofo com uma população de 300 habitantes e Xangai com uma população de 9696300.

A propósito, esses são todos dados de amostra antigos, então os números da população provavelmente não refletem a realidade real em muitos casos.

Veja como faríamos isso com os operadores Menor que ou Igual a e Maior que ou 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 com datas


Quando você usa o BETWEEN operador em datas (como datetime , datahora2 , ou deslocamento de data e hora valores), é melhor usar o formato YYYYMMDD para evitar problemas de localidade (por exemplo, se o usuário alterou o formato de data de sua sessão).

Além disso, se você não fornecer o componente de hora, o padrão será 12:00 A.M.

Portanto, a consulta a seguir não retornaria nenhuma linha que contenha uma parte de hora após 00:00. em 1973-12-31.
SELECT * FROM Artists
WHERE ActiveFrom  BETWEEN '20010101' AND '20011231';

Você pode ajustar seus valores de data adequadamente ou pode preferir usar os operadores Maior que ou Igual a e Menor que.

Assim:
SELECT * FROM Artists
WHERE ActiveFrom  >= '20010101' AND ActiveFrom < '20011231';