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

Trả về tên tương tự từ 2 cột có khoảng trắng khác nhau trong MySQL

Vấn đề

So sánh 2 cột tên có thể khác nhau về khoảng trắng đầu/cuối (ví dụ: ' John ' vs 'John').

Giải pháp: LTRIM() + RTRIM()

Tạo bảng:

CREATE TABLE DemoTable614 (
    EnterName VARCHAR(100),
    ReenterName VARCHAR(100)
);
INSERT INTO DemoTable614 VALUES
(' John ', 'John'),
('Carol ', 'Bob'),
('David ', 'David');

Truy vấn so sánh sau khi trim:

SELECT * FROM DemoTable614
WHERE LTRIM(RTRIM(EnterName)) = LTRIM(RTRIM(ReenterName));

Kết quả:

+------------+--------------+
| EnterName  | ReenterName  |
+------------+--------------+
| John       | John         |
| David      | David        |
+------------+--------------+

Các hàm liên quan

LTRIM(str)RTRIM(str)TRIM(str)TRIM(BOTH 'x' FROM str)
HàmChức năng
Xóa khoảng trắng đầu (leading spaces).
Xóa khoảng trắng cuối (trailing spaces).
Xóa cả đầu và cuối (tương đương LTRIM(RTRIM())).
Xóa ký tự 'x' ở cả 2 đầu.

Cách viết gọn hơn

-- Dùng TRIM() thay cho LTRIM(RTRIM())
WHERE TRIM(EnterName) = TRIM(ReenterName)

Ứng dụng mở rộng

  • Deduplication dữ liệu nhập liệu thủ công.
  • Fuzzy matching: kết hợp với LOWER(), REPLACE() để chuẩn hóa thêm.
  • Data cleaning trước khi JOIN 2 bảng.

Hiệu năng

  • TRIM() không dùng được index → full table scan.
  • Với bảng lớn: tạo generated column clean_name VARCHAR(100) GENERATED ALWAYS AS (TRIM(EnterName)) STORED + index lên cột này.