Giới thiệu
Kết hợp RIGHT() để lấy 3 chữ số cuối và NOT IN để loại trừ các giá trị không mong muốn.
Ví dụ thực hành
1. Tạo bảng DemoTable
mysql> CREATE TABLE DemoTable (Value INT);
2. Chèn dữ liệu
mysql> INSERT INTO DemoTable VALUES (1234),(2345),(7896),(4321);
3. Loại trừ hàng có 3 chữ số cuối là '234' hoặc '321'
mysql> SELECT * FROM DemoTable WHERE RIGHT(Value, 3) NOT IN ('234','321');
4. Kết quả
+-------+
| Value |
+-------+
| 2345 | -- 345
| 7896 | -- 896
+-------+
Giải thích
RIGHT(1234, 3)= '234' → bị loại (trong NOT IN).RIGHT(4321, 3)= '321' → bị loại.RIGHT(2345, 3)= '345' → giữ.RIGHT(7896, 3)= '896' → giữ.
Mở rộng
-- Loại trừ nhiều pattern hơn
WHERE RIGHT(Value, 3) NOT IN ('000','111','222','333','444','555','666','777','888','999')
-- Dùng REGEXP (MySQL 8.0+)
WHERE Value NOT REGEXP '(234|321)$'
-- Tạo generated column để index
ALTER TABLE DemoTable
ADD last3 CHAR(3) GENERATED ALWAYS AS (RIGHT(CAST(Value AS CHAR), 3)) STORED,
ADD INDEX idx_last3 (last3);
Lưu ý
RIGHT()trên cột số (INT) tự động chuyển sang chuỗi.NOT INvới danh sách có NULL sẽ trả về UNKNOWN (không khớp hàng nào). Đảm bảo danh sách không có NULL.- Hiệu suất: full scan. Dữ liệu lớn → generated column + index hoặc REGEXP (cũng full scan nhưng linh hoạt).