2014-09-09 1 views
1

Итак, у меня есть две разные системы, и в обеих системах у меня есть клиенты, к сожалению, обе системы позволяют вам вводить бизнес-имя от руки, чтобы вы закончили с пример ниже.SQL Compare Символы в двух строках подсчитываются одинаковые

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

Что мне нужно, это запрос, который может сравнивать два столбца, чтобы найти наиболее близкие значения. Оттуда я планирую написать веб-приложение, где я могу пропустить кого-нибудь и проверить все записи. Я бы ввел в пример того, что я сделал, но, к сожалению, я честно даже не знаю, возможно ли то, что я прошу. Я бы подумал, что, хотя в этот день и в возрасте я уверен, что я не первый, кто попытается это сделать.

+1

Проведите некоторое исследование расстояния Левенштейн. Существуют реализации для SQL Server, и если ваша база данных не слишком велика, вы можете ее использовать. –

+1

[Расстояние Левенштейна в T-SQL] (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 в одиночку ,

---------- ---------- EDIT

Или вы могли бы сделать исследование о том, что ребята в комментарии рекомендуем Levenshtein distance in T-SQL

Надежда это помогает, удачи!

+0

Леванштейнское расстояние в T-SQL было ответом – scripter78

Смежные вопросы