Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come utilizzare l'operatore BETWEEN in SQL Server

Il BETWEEN di SQL Server operatore consente di testare tra un intervallo di valori nelle query. Ad esempio, puoi verificare che un valore sia compreso tra due numeri.

Il BETWEEN operatore è inclusivo, il che significa che include i valori specificati nell'intervallo. In altre parole, include valori maggiori o uguali al valore inferiore e valori inferiori o uguali al valore superiore. Quindi è come usare >= e <= .

Esempio

Ecco un esempio da dimostrare.

SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;

Risultato:

+--------------+--------------+
| Name         | Population   |
|--------------+--------------|
| Thimphu      | 22000        |
| Weno         | 22000        |
| Nuku´alofa   | 22400        |
| Douglas      | 23487        |
| Saint John´s | 24000        |
+--------------+--------------+

Come accennato, BETWEEN è inclusivo, quindi il risultato include i due valori che ho specificato a sinistra e a destra di AND argomento.

Questo equivale a fare quanto segue.

SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;

Risultato:

+--------------+--------------+
| Name         | Population   |
|--------------+--------------|
| Thimphu      | 22000        |
| Weno         | 22000        |
| Nuku´alofa   | 22400        |
| Douglas      | 23487        |
| Saint John´s | 24000        |
+--------------+--------------+

NOT BETWEEN

Puoi usare il NOT argomento per specificare che il valore deve non essere compreso tra i due valori specificati.

SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;

Risultato:

+-----------------+--------------+
| Name            | Population   |
|-----------------+--------------|
| Adamstown       | 42           |
| West Island     | 167          |
| São Paulo       | 9968485      |
| Seoul           | 9981619      |
| Mumbai (Bombay) | 10500000     |
+-----------------+--------------+

Questa volta otteniamo lo stesso risultato che otterremmo se avessimo utilizzato gli operatori minore di e maggiore di.

SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;

Risultato:

+-----------------+--------------+
| Name            | Population   |
|-----------------+--------------|
| Adamstown       | 42           |
| West Island     | 167          |
| São Paulo       | 9968485      |
| Seoul           | 9981619      |
| Mumbai (Bombay) | 10500000     |
+-----------------+--------------+

Quando si utilizza NOT BETWEEN , se volessimo includere i valori specificati nel test, dovremmo aumentare/diminuire i valori.

SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;

Risultato:

+-----------------+--------------+
| Name            | Population   |
|-----------------+--------------|
| Adamstown       | 42           |
| West Island     | 167          |
| Fakaofo         | 300          |
| Shanghai        | 9696300      |
| São Paulo       | 9968485      |
| Seoul           | 9981619      |
| Mumbai (Bombay) | 10500000     |
+-----------------+--------------+

Questa volta vediamo che due città vengono aggiunte al nostro set di risultati; Fakaofo con una popolazione di 300 abitanti e Shanghai con una popolazione di 9696300.

A proposito, questi sono tutti vecchi dati campione, quindi i dati sulla popolazione probabilmente non riflettono la realtà effettiva in molti casi.

Ecco come lo faremmo con gli operatori Minore di o Uguale a e Maggiore di o Uguale a.

SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;

Risultato:

+-----------------+--------------+
| Name            | Population   |
|-----------------+--------------|
| Adamstown       | 42           |
| West Island     | 167          |
| Fakaofo         | 300          |
| Shanghai        | 9696300      |
| São Paulo       | 9968485      |
| Seoul           | 9981619      |
| Mumbai (Bombay) | 10500000     |
+-----------------+--------------+

BETWEEN con le date

Quando usi il BETWEEN operatore su date (come datetime , dataora2 o datetimeoffset valori), è meglio utilizzare il formato YYYYMMDD per evitare problemi di localizzazione (ad esempio, se l'utente ha modificato il formato della data per la propria sessione).

Inoltre, se non fornisci la componente relativa all'ora, l'impostazione predefinita è 00:00

Pertanto, la query seguente non restituirebbe alcuna riga che contenga una parte temporale dopo le 00:00. il 31-12-1973.

SELECT * FROM Artists
WHERE ActiveFrom  BETWEEN '20010101' AND '20011231';

Puoi modificare i valori della data di conseguenza, oppure potresti preferire utilizzare gli operatori Maggiore di o Uguale a e Minore di.

In questo modo:

SELECT * FROM Artists
WHERE ActiveFrom  >= '20010101' AND ActiveFrom < '20011231';