Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy giá trị nằm giữa hai mốc trong MySQL với BETWEEN

Toán tử BETWEEN trong MySQL kiểm tra xem một giá trị có nằm trong khoảng [giá trị thấp, giá trị cao] hay không (bao gồm cả hai đầu). Áp dụng cho số, ngày, chuỗi. Với chuỗi, so sánh theo thứ tự từ điển (lexicographic).

Ví dụ minh họa

Tạo bảng mã nhân viên (chuỗi):

mysql> CREATE TABLE DemoTable1473 (
    EmployeeCode VARCHAR(20)
);

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1473 VALUES ('EMP_120');
mysql> INSERT INTO DemoTable1473 VALUES ('EMP_125');
mysql> INSERT INTO DemoTable1473 VALUES ('EMP_30');
mysql> INSERT INTO DemoTable1473 VALUES ('EMP_130');

Dữ liệu:

mysql> SELECT * FROM DemoTable1473;
+--------------+
| EmployeeCode |
+--------------+
| EMP_120      |
| EMP_125      |
| EMP_30       |
| EMP_130      |
+--------------+

Tìm mã nhân viên từ 'EMP_124' đến 'EMP_129'

mysql> SELECT * FROM DemoTable1473 
    WHERE EmployeeCode BETWEEN 'EMP_124' AND 'EMP_129';

Kết quả (chỉ EMP_125):

+--------------+
| EmployeeCode |
+--------------+
| EMP_125      |
+--------------+

Giải thích so sánh chuỗi

  • So sánh từng ký tự từ trái sang phải.
  • 'EMP_124' < 'EMP_125' < 'EMP_129' < 'EMP_130' (vì '2' < '3' ở vị trí thứ 6).
  • 'EMP_30' < 'EMP_124' (vì '3' > '1' ở vị trí thứ 5? Wait: 'EMP_3' vs 'EMP_1' — so sánh ký tự thứ 5: '3' (51) > '1' (49) → 'EMP_30' > 'EMP_124'). Thực tế: 'EMP_30' > 'EMP_129' vì '3' > '1'.

Kết luận: BETWEEN trên chuỗi hoạt động theo thứ tự từ điển, không phải giá trị số nhúng trong chuỗi. Nếu cần so sánh số, tách phần số ra hoặc dùng cột số riêng.

BETWEEN với các kiểu dữ liệu khác

KiểuVí dụLưu ý
Số (INT, DECIMAL)WHERE Score BETWEEN 60 AND 100So sánh số học chuẩn
Ngày (DATE, DATETIME)WHERE CreatedAt BETWEEN '2024-01-01' AND '2024-12-31'DATETIME: '2024-12-31' = '2024-12-31 00:00:00' — xem lưu ý bài trước
Chuỗi (VARCHAR, CHAR)WHERE Code BETWEEN 'A001' AND 'A099'So sánh lexicographic (từ điển)

Cú pháp tương đương

WHERE col BETWEEN low AND high
-- Tương đương:
WHERE col >= low AND col <= high

NOT BETWEEN

SELECT * FROM DemoTable1473 
WHERE EmployeeCode NOT BETWEEN 'EMP_124' AND 'EMP_129';

Trả về EMP_120, EMP_30, EMP_130.