2014-09-09 2 views
1

두 가지 시스템이 있고 두 시스템 모두에 고객이 있습니다. 불행히도 두 시스템 모두 비즈니스 이름을 자유롭게 입력 할 수 있도록 허용합니다. 아래 예를 참조하십시오.SQL 두 문자열의 문자 합계가 동일합니다.

Column A has a value of "St John Baptist Church" 
Column B has a value of "John Baptist St Church" 

필자가 알아야 할 것은 가장 근접하게 일치하는 값을 찾기 위해 두 열을 비교할 수있는 쿼리입니다. 거기에서 누군가가 가서 모든 항목을 확인하게 할 수있는 웹 응용 프로그램을 작성할 계획입니다. 나는 내가 한 일에 대한 몇 가지 예를 들어 보겠다.하지만 불행히도 나는 심지어 내가 요구하는 것이 가능한지 알지도 못한다. 나는이 날과 나이에 내가 이것을 시도하려고 시도한 첫 번째 사람이 아닐 것이라고 확신하지만 그것이 있다고 생각할 것입니다.

+1

Levenshtein 거리에 대한 연구를 수행하십시오. SQL Server에 대한 구현이 있으며 데이터베이스가 너무 크지 않은 경우 SQL Server를 사용할 수 있습니다. –

+1

[T-SQL의 Levenshtein 거리] (http://stackoverflow.com/questions/560709/levenshtein-distance-in-t-sql) –

+0

여기에서 응답을 얻은 것 중 가장 빠른 지저분한 지옥 – scripter78

답변

1

당신은 시도하고 도움이 PHP 스크립트와 같은 스크립트 뭔가를 만들 수 있습니다

$words = array(); 
$duplicates = array(); 

function _compare($value, $key, $array) { 
    global $duplicates; 

    $diff = array_diff($array, $value); 

    if (!empty($diff)) { 
     $duplicates[$key] = array_keys($diff); 
    } 

    return $diff; 
} 

$mysqli = new mysqli('localhost', 'username', 'password', 'database'); 
$query = "SELECT id, business_name FROM table"; 

if ($result = $mysqli->query($query)) { 
    while ($row = $result->fetch_object()) { 
     $pattern = '#[^\w\s]+#i'; 
     $row->business_name = preg_replace($pattern, '', $row->business_name); 
     $_words = explode(' ', $row->business_name); 
     $diff = array_walk($words, '_compare', $_words);  
     $words[$row->id][] = $_words; 

     $result->close(); 
    } 
} 

$mysqli->close(); 

이 테스트되지하지만이 혼자 SQL로 가능하다고 생각하지 않기 때문에 당신이이 같은 뭔가가 필요 .

---------- 당신은 주석에 사람이

Levenshtein distance in T-SQL를 추천 무엇에 대한 연구를 할 수있는

또는 EDIT ---------- 그것을 희망 도움, 행운을 빌어 요!

+0

T-SQL의 Levenshtein 거리가 답이었습니다. – scripter78