Máy chủ SQL BETWEEN
toán tử cho phép bạn kiểm tra giữa một loạt các giá trị trong các truy vấn của bạn. Ví dụ:bạn có thể kiểm tra xem một giá trị có nằm giữa hai số hay không.
BETWEEN
toán tử là bao gồm, có nghĩa là nó bao gồm các giá trị mà bạn chỉ định trong phạm vi. Nghĩa là, nó bao gồm các giá trị lớn hơn hoặc bằng giá trị thấp hơn và các giá trị nhỏ hơn hoặc bằng giá trị cao hơn. Do đó, nó giống như sử dụng >=
và <=
.
Ví dụ
Đây là một ví dụ để chứng minh.
SELECT Name, Population
FROM city
WHERE Population BETWEEN 22000 AND 24000
ORDER BY Population ASC;
Kết quả:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
Như đã đề cập, BETWEEN
là bao gồm, vì vậy kết quả bao gồm hai giá trị mà tôi đã chỉ định ở bên trái và bên phải của AND
đối số.
Điều này tương đương với việc làm như sau.
SELECT Name, Population
FROM city
WHERE Population >= 22000 AND Population <= 24000
ORDER BY Population ASC;
Kết quả:
+--------------+--------------+ | Name | Population | |--------------+--------------| | Thimphu | 22000 | | Weno | 22000 | | Nuku´alofa | 22400 | | Douglas | 23487 | | Saint John´s | 24000 | +--------------+--------------+
NOT BETWEEN
Bạn có thể sử dụng NOT
đối số để chỉ định rằng giá trị không nên nằm giữa hai giá trị được chỉ định.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 300 AND 9696300
ORDER BY Population ASC;
Kết quả:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Lần này, chúng tôi nhận được kết quả tương tự nếu chúng tôi sử dụng toán tử nhỏ hơn và lớn hơn.
SELECT Name, Population
FROM city
WHERE Population < 300 OR Population > 9696300
ORDER BY Population ASC;
Kết quả:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Khi sử dụng NOT BETWEEN
, nếu chúng tôi muốn bao gồm các giá trị được chỉ định trong thử nghiệm, chúng tôi sẽ cần tăng / giảm các giá trị.
SELECT Name, Population
FROM city
WHERE Population NOT BETWEEN 301 AND 9696299
ORDER BY Population ASC;
Kết quả:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
Lần này, chúng tôi thấy rằng hai thành phố được thêm vào tập kết quả của chúng tôi; Fakaofo với dân số 300 người và Thượng Hải với dân số 9696300.
Nhân tiện, đây là tất cả dữ liệu mẫu cũ nên số liệu dân số có thể không phản ánh thực tế thực tế trong nhiều trường hợp.
Đây là cách chúng tôi thực hiện với các toán tử Nhỏ hơn hoặc Bằng với và Lớn hơn hoặc Bằng với.
SELECT Name, Population
FROM city
WHERE Population <= 300 OR Population >= 9696300
ORDER BY Population ASC;
Kết quả:
+-----------------+--------------+ | Name | Population | |-----------------+--------------| | Adamstown | 42 | | West Island | 167 | | Fakaofo | 300 | | Shanghai | 9696300 | | São Paulo | 9968485 | | Seoul | 9981619 | | Mumbai (Bombay) | 10500000 | +-----------------+--------------+
BETWEEN
với Ngày
Khi bạn sử dụng BETWEEN
toán tử vào ngày (chẳng hạn như datetime , datetime2 hoặc datetimeoffset giá trị), tốt nhất là sử dụng định dạng YYYYMMDD
để tránh bất kỳ vấn đề ngôn ngữ nào (ví dụ:nếu người dùng đã thay đổi định dạng ngày cho phiên của họ).
Ngoài ra, nếu bạn không cung cấp thành phần thời gian, thành phần này sẽ mặc định là 12:00 SA
Do đó, truy vấn sau sẽ không trả về bất kỳ hàng nào chứa phần thời gian sau 12:00 SA. vào năm 1973-12-31.
SELECT * FROM Artists
WHERE ActiveFrom BETWEEN '20010101' AND '20011231';
Bạn có thể điều chỉnh các giá trị ngày của mình cho phù hợp hoặc bạn có thể thích sử dụng các toán tử Lớn hơn hoặc Bằng và Nhỏ hơn.
Như thế này:
SELECT * FROM Artists
WHERE ActiveFrom >= '20010101' AND ActiveFrom < '20011231';