Serwer SQL BETWEEN
Operator umożliwia testowanie między zakresem wartości w zapytaniach. Na przykład możesz sprawdzić, czy wartość znajduje się między dwiema liczbami.
BETWEEN
operator jest inkluzywny, co oznacza, że zawiera wartości określone w zakresie. Oznacza to, że zawiera wartości, które są większe lub równe wartości niższej oraz wartości, które są mniejsze lub równe wartości wyższej. Dlatego to tak, jakby używać >=
i <=
.
Przykład
Oto przykład do zademonstrowania.
SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;
Wynik:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
Jak wspomniano, BETWEEN
jest włącznie, więc wynik zawiera dwie wartości, które określiłem po lewej i prawej stronie AND
argument.
Jest to równoważne z wykonaniem następujących czynności.
SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;
Wynik:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
NOT BETWEEN
Możesz użyć NOT
argument określający, że wartość nie powinna nie być między dwiema określonymi wartościami.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;
Wynik:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Tym razem otrzymujemy taki sam wynik, jaki uzyskalibyśmy, gdybyśmy użyli operatorów mniejszego i większego niż.
SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;
Wynik:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Gdy używasz NOT BETWEEN
, jeśli chcielibyśmy uwzględnić określone wartości w teście, musielibyśmy zwiększyć/zmniejszyć wartości.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;
Wynik:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Tym razem widzimy, że do naszego zestawu wyników zostały dodane dwa miasta; 300 mieszkańców Fakaofo i 9696300 mieszkańców Szanghaju.
Nawiasem mówiąc, są to wszystkie stare dane próbne, więc dane dotyczące populacji prawdopodobnie w wielu przypadkach nie odzwierciedlają rzeczywistej rzeczywistości.
Oto, jak zrobimy to z operatorami Mniej niż lub Równe i Większe niż lub Równe.
SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;
Wynik:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
BETWEEN
z datami
Kiedy używasz BETWEEN
operator w datach (takich jak data-godzina , datagodzina2 lub przesunięcie daty i godziny wartości), najlepiej używać formatu YYYYMMDD
w celu uniknięcia problemów z lokalizacją (na przykład, jeśli użytkownik zmienił format daty swojej sesji).
Ponadto, jeśli nie podasz składnika czasu, domyślnie jest to 12:00 AM.
Dlatego następujące zapytanie nie zwróci żadnych wierszy zawierających część czasu po godzinie 12:00. 31.12.1973.
SELECT * FROM Artists
WHERE ActiveFrom BETWEEN '20010101' AND '20011231';
Możesz odpowiednio dostosować wartości dat lub użyć operatorów Większe niż lub Równe i Mniejsze niż.
Tak:
SELECT * FROM Artists
WHERE ActiveFrom >= '20010101' AND ActiveFrom < '20011231';