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ểu | Ví dụ | Lưu ý |
|---|---|---|
| Số (INT, DECIMAL) | WHERE Score BETWEEN 60 AND 100 | So 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.