Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser l'opérateur BETWEEN dans SQL Server

Le serveur SQL BETWEEN L'opérateur vous permet de tester entre une plage de valeurs dans vos requêtes. Par exemple, vous pouvez tester qu'une valeur est comprise entre deux nombres.

Le BETWEEN L'opérateur est inclusif, ce qui signifie qu'il inclut les valeurs que vous spécifiez dans la plage. Autrement dit, il inclut des valeurs supérieures ou égales à la valeur inférieure et des valeurs inférieures ou égales à la valeur supérieure. Par conséquent, c'est comme utiliser >= et <= .

Exemple

Voici un exemple pour illustrer.

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

Résultat :

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

Comme mentionné, BETWEEN est inclusif, donc le résultat inclut les deux valeurs que j'ai spécifiées à gauche et à droite du AND arguments.

Cela équivaut à faire ce qui suit.

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

Résultat :

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

NOT BETWEEN

Vous pouvez utiliser le NOT argument pour spécifier que la valeur ne doit pas être entre les deux valeurs spécifiées.

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

Résultat :

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

Cette fois, nous obtenons le même résultat que si nous avions utilisé les opérateurs inférieur à et supérieur à.

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

Résultat :

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

Lors de l'utilisation de NOT BETWEEN , si nous voulions inclure les valeurs spécifiées dans le test, nous aurions besoin d'incrémenter/décrémenter les valeurs.

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

Résultat :

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

Cette fois, nous voyons que deux villes sont ajoutées à notre ensemble de résultats ; Fakaofo avec une population de 300 habitants et Shanghai avec une population de 9 696 300 habitants.

Soit dit en passant, il s'agit d'anciennes données d'échantillon, de sorte que les chiffres de la population ne reflètent probablement pas la réalité réelle dans de nombreux cas.

Voici comment procéder avec les opérateurs Inférieur ou égal à et Supérieur ou égal à.

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

Résultat :

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

BETWEEN avec dates

Lorsque vous utilisez le BETWEEN opérateur sur les dates (comme datetime , dateheure2 , ou datetimeoffset valeurs), il est préférable d'utiliser le format YYYYMMDD afin d'éviter tout problème de paramètres régionaux (par exemple, si l'utilisateur a modifié le format de date de sa session).

De plus, si vous ne fournissez pas le composant horaire, la valeur par défaut est 12h00.

Par conséquent, la requête suivante ne renverra aucune ligne contenant une partie horaire après 12h00. le 1973-12-31.

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

Vous pouvez soit ajuster vos valeurs de date en conséquence, soit utiliser les opérateurs Supérieur à ou Égal à et Inférieur à.

Comme ceci :

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