sql >> Databáze >  >> RDS >> Sqlserver

Jak používat operátor BETWEEN v SQL Server

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

  1. Jak vytisknout několik zpráv s čárovým kódem \ nebo několik čárových kódů v jedné zprávě

  2. SQL pohledy

  3. Skupiny dostupnosti SQL Server AlwaysOn:Instalace a konfigurace, část 2

  4. Použití ODBC se Salesforce a Active Directory Federation Services (ADFS) Single Sign On (SSO)