I SQL, BETWEEN operatorn låter dig söka efter värden som ligger inom ett givet intervall.
BETWEEN operatorn anger ett intervall som ska testas och returnerar TRUE när operanden är inom intervallet för jämförelser.
Källtabell
Följande tabell används för exemplen på den här sidan.
SELECT * FROM Pets; Resultat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Exempel
Här är ett enkelt exempel för att demonstrera BETWEEN operatör.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17'; Resultat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
I det här exemplet returnerade vi alla rader där DOB kolumnen var mellan 2018-10-01 och 2020-09-17 .
I det här fallet matchade fyra rader det kriteriet, och därför returnerades fyra rader.
BETWEEN är inklusive
BETWEEN operatör. är inkluderande. Det vill säga, det inkluderar värdena i varje ände av intervallet. Om du tittar på resultaten i föregående exempel ser du att det finns värden i båda ändarna som exakt matchar datumen vi angav.
Det är samma sak som att använda operatorn större än eller lika med (>= ) kombinerat med operatorn mindre än eller lika med (<= ).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17'; Resultat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
För att göra det till ett exklusivt sortiment, använd större än (> ) operator och mindre än (< ) operatör.
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17'; Resultat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Om du måste använda BETWEEN operatör måste du begränsa intervallet i enlighet därmed.
Så här:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16'; Resultat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Använda numeriska värden
De tidigare exemplen använder datum, men du är inte begränsad till bara datum. Här är ett exempel som använder numeriska värden.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3; Resultat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 7 | 3 | 2 | Bark | NULL | +---------+-------------+-----------+-----------+------------+
Använda strängvärden
Vi kan ta det ett steg längre och använda BETWEEN för att jämföra två strängkolumner.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName; Resultat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Du måste dock vara försiktig. Du kanske tror att vi bara kan använda initialbokstaven, så här:
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName; Men det kommer att resultera i detta:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Den inkluderade inte Wag som föregående fråga gjorde. Det beror på att BETWEEN tittar på hela strängen. I så fall Wag är större än W , så det ingår inte i resultaten.