sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder MELLAN-operatören i SQL Server

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

  1. Ansluter till Vertica i IRI Workbench

  2. FEL:behörighet nekades för sekvensen city_id_seq med Postgres

  3. Databasunderställning – Hur man gör i IRI Voracity

  4. Påverkar begränsningar av främmande nyckel frågetransformationer i Oracle?