De SQL Server BETWEEN
operator kunt u testen tussen een reeks waarden in uw query's. U kunt bijvoorbeeld testen of een waarde tussen twee getallen ligt.
De BETWEEN
operator is inclusief, wat betekent dat het de waarden bevat die u opgeeft binnen het bereik. Dat wil zeggen, het omvat waarden die groter zijn dan of gelijk zijn aan de lagere waarde, en waarden die kleiner zijn dan of gelijk zijn aan de hogere waarde. Daarom is het alsof je >=
. gebruikt en <=
.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;
Resultaat:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
Zoals vermeld, BETWEEN
is inclusief, dus het resultaat bevat de twee waarden die ik heb opgegeven links en rechts van de AND
argument.
Dit komt overeen met het volgende doen.
SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;
Resultaat:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
NOT BETWEEN
U kunt de NOT
. gebruiken argument om aan te geven dat de waarde niet . moet zijn tussen de twee opgegeven waarden zijn.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;
Resultaat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Deze keer krijgen we hetzelfde resultaat dat we zouden krijgen als we de operatoren kleiner dan en groter dan hadden gebruikt.
SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;
Resultaat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Bij gebruik van NOT BETWEEN
, als we de opgegeven waarden in de test willen opnemen, moeten we de waarden verhogen/verlagen.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;
Resultaat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Deze keer zien we dat er twee steden zijn toegevoegd aan onze resultatenset; Fakaofo met 300 inwoners en Shanghai met 9696300 inwoners.
Dit zijn trouwens allemaal oude steekproefgegevens, dus de populatiecijfers geven in veel gevallen waarschijnlijk niet de werkelijke werkelijkheid weer.
Hier is hoe we het zouden doen met de operatoren Kleiner dan of Gelijk aan en Groter dan of Gelijk aan.
SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;
Resultaat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
BETWEEN
met datums
Wanneer u de BETWEEN
. gebruikt operator op datums (zoals datetime , datetime2 , of datetimeoffset waarden), kunt u het beste de indeling YYYYMMDD
. gebruiken om locale problemen te voorkomen (bijvoorbeeld als de gebruiker het datumformaat voor zijn sessie heeft gewijzigd).
Als u de tijdcomponent niet opgeeft, wordt deze standaard ingesteld op 12.00 uur.
Daarom retourneert de volgende query geen rijen die een tijdsdeel bevatten na 12:00 A.M. op 1973/12/31.
SELECT * FROM Artists
WHERE ActiveFrom BETWEEN '20010101' AND '20011231';
U kunt uw datumwaarden dienovereenkomstig aanpassen, of u kunt er de voorkeur aan geven de operatoren Groter dan of Gelijk aan en Kleiner dan te gebruiken.
Zoals dit:
SELECT * FROM Artists
WHERE ActiveFrom >= '20010101' AND ActiveFrom < '20011231';