2015-11-05 216 views
0

我不確定這是甚至可能沒有寫一些先進的算法,但有沒有辦法在SQL中比較兩個字符串,並獲得相同數量的匹配字符的百分比?有人手工輸入了一串字符串,我需要使它們不那麼獨特。例如,如果我有「LOT & SIGN LIGHTING」,「SIGN LIGHTING」和「ELECTRICIAN」,我想循環查看單詞列表(「SIGN」,「PLUMBING」,「ELECTRIC」),並返回匹配的百分比,所以我可以取代原來的,如果說它超過85%的相似。在sql中的字符串匹配

+2

我懷疑你可能會發現Levenshtein距離有用。一些數據庫具有內置的這種功能。其他人有用戶定義的功能。 –

+1

您正在使用哪個SQL數據庫?它們都有不同的字符串功能。 – Schwern

+0

它始終是完整的搜索短語?那麼,如果你找到一個「S」,並且接下來的四個字母匹配「SIGN」而不是它的命中?或者「MySiggy」會因爲擬合「Sig」而被擊中75%?如果第一個,算法不會那麼複雜。只要找到第一個字母的位置,並檢查下一個子字符串... – Shnugo

回答

2

SQL標準包含的東西不像你問的那樣。您可以使用存儲過程編寫某些內容,但各種SQL數據庫已經包含模糊匹配函數,可以計算字符串之間的相似性和差異性。

The PostgreSQL fuzzystrmatch modulelevenshtein()它將計算兩個字符串之間的Levenshtein distance,基本上是您需要爲獲取相同字符串而進行的單個字符編輯的數量。

  "LOT & SIGN LIGHTING", "SIGN LIGHTING", "ELECTRICIAN" 
SIGN  15      9    9 
PLUMBING 15      9    9 
ELECTRIC 17      9    3 

正如你所看到的,它不是在識別多空字符串之間的關係非常有用。您可以減少插入,刪除和替換字符的成本,使其更好地工作。例如,如果不匹配的成本增加到2 ...

  "LOT & SIGN LIGHTING", "SIGN LIGHTING", "ELECTRICIAN" 
SIGN  15      9    11 
PLUMBING 19      13    13 
ELECTRIC 21      15    3