SQL Server BETWEEN
операторът ви позволява да тествате между диапазон от стойности във вашите заявки. Например, можете да тествате дали дадена стойност е между две числа.
BETWEEN
операторът е включващ, което означава, че включва стойностите, които сте посочили в рамките на диапазона. Тоест, включва стойности, които са по-големи или равни на по-ниската стойност, и стойности, които са по-малки или равни на по-високата стойност. Следователно е като да използвате >=
и <=
.
Пример
Ето пример за демонстрация.
SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;
Резултат:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
Както бе споменато, BETWEEN
включва, така че резултатът включва двете стойности, които посочих отляво и отдясно на AND
аргумент.
Това е еквивалентно на следното.
SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;
Резултат:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
NOT BETWEEN
Можете да използвате NOT
аргумент, за да посочите, че стойността трябва не да бъде между двете посочени стойности.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;
Резултат:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Този път получаваме същия резултат, който бихме получили, ако използвахме операторите по-малко от и по-голямо от.
SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;
Резултат:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Когато използвате NOT BETWEEN
, ако искаме да включим посочените стойности в теста, ще трябва да увеличим/намалим стойностите.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;
Резултат:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Този път виждаме, че към нашия набор от резултати са добавени два града; Факаофо с население от 300 души и Шанхай с население от 9696300.
Между другото, това са всички стари извадкови данни, така че данните за населението вероятно не отразяват реалната реалност в много случаи.
Ето как ще го направим с операторите по-малко или равно на и по-голямо от или равно на.
SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;
Резултат:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
BETWEEN
с дати
Когато използвате BETWEEN
оператор за дати (като datetime , дата и час2 , или datetimeoffset стойности), най-добре е да използвате формата YYYYMMDD
за да се избегнат проблеми с локала (например, ако потребителят е променил формата на датата за своята сесия).
Освен това, ако не предоставите компонента за време, той по подразбиране е 12:00 сутринта.
Следователно следната заявка няма да върне редове, които съдържат времева част след 12:00 часа сутринта. на 1973-12-31.
SELECT * FROM Artists
WHERE ActiveFrom BETWEEN '20010101' AND '20011231';
Можете или съответно да коригирате стойностите на датата си, или може да предпочетете да използвате операторите По-голямо или Равно на и По-малко от.
Като това:
SELECT * FROM Artists
WHERE ActiveFrom >= '20010101' AND ActiveFrom < '20011231';