SQL Server BETWEEN
operátor umožňuje testovat mezi rozsahem hodnot ve vašich dotazech. Můžete například otestovat, že hodnota je mezi dvěma čísly.
BETWEEN
operátor je inkluzivní, což znamená, že zahrnuje hodnoty, které zadáte v rozsahu. To znamená, že zahrnuje hodnoty, které jsou větší nebo rovné nižší hodnotě, a hodnoty, které jsou menší nebo rovné vyšší hodnotě. Proto je to jako používat >=
a <=
.
Příklad
Zde je příklad k demonstraci.
SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;
Výsledek:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
Jak již bylo zmíněno, BETWEEN
je včetně, takže výsledek zahrnuje dvě hodnoty, které jsem zadal vlevo a vpravo od AND
argument.
Toto je ekvivalent provedení následujícího.
SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;
Výsledek:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
NOT BETWEEN
Můžete použít NOT
argument k určení, že hodnota by neměla být mezi dvěma zadanými hodnotami.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;
Výsledek:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Tentokrát dostaneme stejný výsledek, jako kdybychom použili operátory menší než a větší než.
SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;
Výsledek:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Při použití NOT BETWEEN
, pokud bychom chtěli do testu zahrnout zadané hodnoty, museli bychom hodnoty zvýšit/snížit.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;
Výsledek:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Tentokrát vidíme, že do naší sady výsledků jsou přidána dvě města; Fakaofo s 300 obyvateli a Šanghaj s 9696300 obyvateli.
Mimochodem, toto jsou všechna stará vzorová data, takže údaje o populaci pravděpodobně v mnoha případech neodrážejí skutečnou realitu.
Zde je návod, jak bychom to udělali s operátory menší než nebo rovno a větší než nebo rovno.
SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;
Výsledek:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
BETWEEN
s daty
Když použijete BETWEEN
operátor na datech (například datetime , datetime2 nebo datetimeoffset hodnoty), je nejlepší použít formát YYYYMMDD
abyste se vyhnuli jakýmkoli problémům s místním nastavením (například pokud uživatel změnil formát data pro svou relaci).
Také, pokud nezadáte časovou složku, výchozí je 00:00
Následující dotaz by proto nevrátil žádné řádky obsahující časovou část po 00:00. dne 1973-12-31.
SELECT * FROM Artists
WHERE ActiveFrom BETWEEN '20010101' AND '20011231';
Hodnoty data můžete odpovídajícím způsobem upravit, nebo můžete raději použít operátory Větší než, Rovná se a Méně než.
Takhle:
SELECT * FROM Artists
WHERE ActiveFrom >= '20010101' AND ActiveFrom < '20011231';