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