Tìm dữ liệu gần giống trong SQL

1. Dùng LIKE / ILIKE (cơ bản nhất)

-- Tìm chứa chuỗi
SELECT * FROM table_name
WHERE column_name LIKE '%từ_khóa%';

-- Không phân biệt hoa thường (PostgreSQL)
WHERE column_name ILIKE '%từ_khóa%';

-- Tìm bắt đầu / kết thúc
WHERE column_name LIKE 'từ_khóa%'
WHERE column_name LIKE '%từ_khóa';

2. Full-Text Search (tốt hơn LIKE)

MySQL:

SELECT * FROM table_name
WHERE MATCH(column_name) AGAINST('từ khóa' IN NATURAL LANGUAGE MODE);

PostgreSQL:

SELECT * FROM table_name
WHERE to_tsvector('vietnamese', column_name) @@ to_tsquery('vietnamese', 'từ & khóa');

3. So sánh độ tương đồng (Similarity)

PostgreSQL (cần extension pg_trgm):

CREATE EXTENSION IF NOT EXISTS pg_trgm;

-- Tìm theo độ giống nhau (0 → 1)
SELECT *, similarity(column_name, 'từ khóa') AS score
FROM table_name
WHERE column_name % 'từ khóa'          -- operator % (threshold mặc định 0.3)
ORDER BY score DESC;

MySQL (dùng hàm tự viết hoặc UDF, hoặc SOUNDEX):

-- SOUNDEX (phát âm gần giống)
SELECT * FROM table_name
WHERE SOUNDEX(column_name) = SOUNDEX('từ khóa');

4. Khoảng cách chỉnh sửa (Levenshtein)

PostgreSQL (extension fuzzystrmatch):

CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;

SELECT *, levenshtein(column_name, 'từ khóa') AS distance
FROM table_name
WHERE levenshtein(column_name, 'từ khóa') <= 3   -- cho phép sai tối đa 3 ký tự
ORDER BY distance;

5. Kết hợp nhiều điều kiện (thực tế hay dùng)

SELECT *
FROM table_name
WHERE column_name ILIKE '%từ%'
   OR column_name % 'từ khóa'                 -- pg_trgm
   OR levenshtein(column_name, 'từ khóa') <= 2
ORDER BY 
    CASE 
        WHEN column_name ILIKE 'từ khóa%' THEN 1
        WHEN column_name ILIKE '%từ khóa%' THEN 2
        ELSE 3
    END,
    similarity(column_name, 'từ khóa') DESC;

Related Posts

USB Tethering – Cách chia sẻ dữ liệu điện thoại qua cáp USB

Bạn đang đi công tác, du lịch hay chỉ cần kết nối laptop với Internet mà không muốn phụ thuộc vào Wi‑Fi? USB tethering (chia sẻ Internet…

Đừng Bao Giờ Bảo AI: “Sửa ảnh này cho tôi” – 10 Câu Lệnh Biến AI Thành Thợ Ảnh Chuyên Nghiệp

Bạn đã bao giờ gửi một tấm ảnh cho AI và nhận về một kết quả “thảm họa” chưa? Sai lầm không nằm ở công cụ, mà…

Cách gửi email bằng Gmail trong C#

Sau khi Google giới thiệu hệ thống xác minh hai bước (Two-step verification) cho tài khoản Google, việc sử dụng Gmail cho mục đích cá nhân trở…

Cách “Unblock” nhiều tệp cùng lúc bằng PowerShell

Nếu bạn đã từng cảm thấy khó chịu với thông báo cảnh báo trên máy tính Windows “This file came from another computer and might be blocked…

Cách mở VoLTE trên các máy điện thoại Xiaomi

Mở app Điện thoại và bấm vào: VoLTE *#*#86583#*#* VoWIFI *#*#869434#*#* Sau đó gửi đăng ký cho tổng đài để kích hoạt. Ví dụ đối với mạng…

Cách Tìm kiếm và Thay thế trong phpMyAdmin? (+Thay thế URL)

Tìm kiếm và thay thế trong phpMyAdmin là một quá trình mà bạn tự động tìm kiếm một từ trong cơ sở dữ liệu của mình và…

Leave a Reply