我有一個列名爲company_name(字符串)的表,我需要找到此列的重複值,我不能使用distinct或group by因爲它們不完全相同。 如:如何找到重複的字符串值,其中不完全相同,但在SQL中相似
atec,inc
atec inc
ate inc
abc group
abc groups
abc grups
如何找到在SQL這樣的項目還是有這方面的任何Ruby庫。
我有一個列名爲company_name(字符串)的表,我需要找到此列的重複值,我不能使用distinct或group by因爲它們不完全相同。 如:如何找到重複的字符串值,其中不完全相同,但在SQL中相似
atec,inc
atec inc
ate inc
abc group
abc groups
abc grups
如何找到在SQL這樣的項目還是有這方面的任何Ruby庫。
我不知道SQL有一個SELECT WHERE A SORTA_OF_LIKE B但查找「Levenshtein距離」,也許是一種做你想做的事情的方式。
如果有某種模式的變化,你可以使用正則表達式嘗試,它的MySQL似乎支持(我們使用Postgres的,這肯定不會):
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
如果不是的話,恐怕您必須在您的應用中執行此操作。正如Pete提到的,有各種算法可以找到類似的聲音,我們使用Levenshtein距離,Simhashes的Hamming距離和Kölner語音編碼來達到這個目的。
這將是一個函數索引一個完美的使用,但我不認爲MySQL有其中的一個,可我建議全在MySQL中搜索文本?
http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html
具體布爾搜索:
http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
另外,如果你不熟悉的話所產生,這是強大的概念,這也將幫助您提高搜索的檢索。
希望有所幫助。
你不能使用正則表達式來選擇,只是返回一個真/假(匹配/不匹配)或那個效果。 – dogmatic69 2011-04-01 14:22:42
@ domatic69在Postgres中有類似'SELECT record FROM myrecords WHERE record〜'A';'的東西。 http://oreilly.com/pub/a/databases/2006/02/02/postgresq_regexes.html – 2011-04-01 15:44:53