SQL-servern BETWEEN
operatorn låter dig testa mellan en rad värden i dina frågor. Du kan till exempel testa att ett värde ligger mellan två siffror.
BETWEEN
operatorn är inkluderande, vilket betyder att den inkluderar de värden som du anger inom intervallet. Det vill säga, det inkluderar värden som är större än eller lika med det lägre värdet och värden som är mindre än eller lika med det högre värdet. Därför är det som att använda >=
och <=
.
Exempel
Här är ett exempel att visa.
SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;
Resultat:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
Som nämnts, BETWEEN
är inklusive, så resultatet inkluderar de två värdena som jag angav till vänster och höger om AND
argument.
Detta motsvarar att göra följande.
SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;
Resultat:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
NOT BETWEEN
Du kan använda NOT
argument för att ange att värdet ska inte vara mellan de två angivna värdena.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;
Resultat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Den här gången får vi samma resultat som om vi hade använt mindre än och större än-operatörer.
SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;
Resultat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
När du använder NOT BETWEEN
, om vi vill inkludera de angivna värdena i testet, skulle vi behöva öka/minska värdena.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;
Resultat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Den här gången ser vi att två städer läggs till i vår resultatuppsättning; Fakaofo med en befolkning på 300 och Shanghai med en befolkning på 9696300.
Förresten, detta är alla gamla urvalsdata så populationssiffrorna återspeglar förmodligen inte verkligheten i många fall.
Så här skulle vi göra det med operatörerna Less Than eller Equal To och Greater Than eller Equal To.
SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;
Resultat:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
BETWEEN
med datum
När du använder BETWEEN
operator på datum (som datumtid , datetime2 , eller datumtidsförskjutning värden), är det bäst att använda formatet YYYYMMDD
för att undvika lokala problem (till exempel om användaren har ändrat datumformatet för sin session).
Dessutom, om du inte tillhandahåller tidskomponenten, är den som standard 12:00 A.M.
Följande fråga skulle därför inte returnera några rader som innehåller en tidsdel efter 12:00 A.M. den 1973-12-31.
SELECT * FROM Artists
WHERE ActiveFrom BETWEEN '20010101' AND '20011231';
Du kan antingen justera dina datumvärden i enlighet med detta, eller så kanske du föredrar att använda operatorerna Större än eller Lika med och Mindre än.
Så här:
SELECT * FROM Artists
WHERE ActiveFrom >= '20010101' AND ActiveFrom < '20011231';