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

Loại trừ giá trị có 3 chữ số cuối cụ thể trong MySQL với RIGHT() và NOT IN

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 IN vớ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).