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
| Hàm | Chứ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.