Một giải pháp khá nhanh cho miền cụ thể có thể là tính toán độ tương đồng của chuỗi bằng cách sử dụng SOUNDEX và khoảng cách số giữa 2 chuỗi. Điều này chỉ thực sự hữu ích khi bạn có nhiều mã sản phẩm.
Sử dụng một UDF đơn giản như bên dưới, bạn có thể trích xuất các ký tự số từ một chuỗi để sau đó bạn có thể lấy 2200 từ 'CLC 2200npk' và 1100 từ 'CLC 1100', vì vậy, bây giờ bạn có thể xác định độ gần gũi dựa trên đầu ra SOUNDEX của mỗi đầu vào cũng như sự gần gũi của thành phần số của mỗi đầu vào.
CREATE Function [dbo].[ExtractNumeric](@input VARCHAR(1000))
RETURNS INT
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @input) > 0
BEGIN
SET @input = STUFF(@input, PATINDEX('%[^0-9]%', @input), 1, '')
END
IF @input = '' OR @input IS NULL
SET @input = '0'
RETURN CAST(@input AS INT)
END
GO
Theo như các thuật toán mục đích chung, có một số thuật toán có thể giúp bạn với các mức độ thành công khác nhau tùy thuộc vào kích thước tập dữ liệu và yêu cầu hiệu suất. (cả hai liên kết đều có triển khai TSQL)
- Double Metaphone - Thuật ngữ này sẽ mang lại cho bạn kết quả khớp tốt hơn soundex với chi phí là tốc độ, nó thực sự tốt cho việc sửa lỗi chính tả.
- Khoảng cách Levenshtein - Điều này sẽ tính toán số lần nhấn phím để chuyển một chuỗi thành chuỗi khác, chẳng hạn như để đi từ 'CLC 2200npk' đến 'CLC 2200' là 3, trong khi từ 'CLC 2200npk' đến 'CLC 1100' là 5.
Đây là một bài viết thú vị áp dụng cả hai thuật ngữ với nhau có thể cung cấp cho bạn một vài ý tưởng.
Hy vọng rằng một số điều đó sẽ giúp được một chút.
CHỈNH SỬA:Đây là cách triển khai Khoảng cách Levenshtein từng phần nhanh hơn nhiều (đọc bài đăng nó sẽ không trả về kết quả chính xác giống như kết quả bình thường). Trên bảng thử nghiệm của tôi gồm 125000 hàng, nó chạy trong 6 giây so với 60 giây đối với hàng đầu tiên tôi liên kết.