2012-10-28 28 views
5

Tôi có một câu hỏi liên quan đến SQL.Kết hợp mẫu SQL

Tôi muốn đối sánh hai trường cho tương đồng và trả lại phần trăm về mức độ tương tự.

Ví dụ nếu tôi có một trường gọi là doc, trong đó có những điều sau

This is my first assignment in SQL 

và trong lĩnh vực khác tôi có cái gì đó như

My first assignment in SQL 

Tôi muốn biết làm thế nào tôi có thể kiểm tra những điểm tương đồng giữa hai và trả về bao nhiêu phần trăm.

Tôi đã thực hiện một số nghiên cứu và muốn có ý kiến ​​thứ hai cộng với tôi chưa bao giờ yêu cầu mã nguồn. Ive nhìn vào Soundex(), Difference(), kết hợp chuỗi Fuzzy bằng thuật toán khoảng cách Levenshtein.

+3

Mẹo: Hãy nhìn vào 'Hamming distance' và các thuật toán chuỗi tương đồng tương tự –

+1

tôi đã làm một số nghiên cứu và muốn có một ý kiến ​​thứ hai cộng với tôi không bao giờ yêu cầu mã nguồn. Ive nhìn vào Soundex(), Difference(), Kết hợp chuỗi mờ bằng thuật toán khoảng cách Levenshtein. Tuy nhiên, cảm ơn cho tip vẫn là – user1781162

Trả lời

5

Bạn không nói phiên bản Oracle nào bạn đang sử dụng. Ví dụ này dựa trên phiên bản 11g. Bạn có thể sử dụng chức năng edit_distance của gói utl_match để xác định số lượng ký tự bạn cần thay đổi để chuyển chuỗi này sang chuỗi khác. Hàm greatest trả về giá trị lớn nhất trong danh sách được truyền trong tham số. Dưới đây là một ví dụ:

-- sample of data 
with t1(col1, col2) as(
    select 'This is my first assignment in SQL', 'My first assignment in SQL ' from dual 
) 
-- the query 
select trunc(((greatest(length(col1), length(col2)) - 
       (utl_match.edit_distance(col2, col1))) * 100)/
      greatest(length(col1), length(col2)), 2) as "%" 
    from t1 

kết quả:

  % 
---------- 
    70.58 

Phụ Lục

Như @jonearles một cách chính xác chỉ ra, đó là đơn giản hơn nhiều để sử dụng chức năng của edit_distance_similarityutl_match gói.

with t1(col1, col2) as(
    select 'This is my first assignment in SQL', 'My first assignment in SQL ' from dual 
) 
    select utl_match.edit_distance_similarity(col1, col2) as "%" 
    from t1 
    ; 

Kết quả:

  % 
---------- 
     71 
+0

Cảm ơn! Tôi đang sử dụng Oracle 11G. Tôi đã không mong đợi bất kỳ mã vì vậy Cảm ơn! – user1781162

+2

+1 Bạn có thể đơn giản hóa điều này bằng 'utl_match.edit_distance_similarity (col1, col2)'. –

Các vấn đề liên quan