2009-10-06 5 views
0

Я пытаюсь сравнить ряд строк, как в следующемSQL сравнить две строки в доступе MS

rodeo  rodas 
carrot crate 
GLX  GLX 1.1 
GLX  glxs 

в Comparision не нужно быть чувствительны к регистру я пытаюсь написать SQL, где я обновив первая строка со второй строкой, если они совпадают. Здесь, кроме второй строки, совпадают все остальные примеры. Я хотел бы написать запрос, который обновляет строки, кроме второго.

это можно непосредственно в запросе в ACCESS

благодаря

ответ

2

Другие, чем при использовании LIKE, это не представляется возможным непосредственно в запросе в MS Access. Для приблизительных совпадений вам необходимо реализовать какую-то функцию Levenshtein Distance.

+0

Как этот тариф в исполнении? Я реализовал алгоритм в C#, и он выглядит довольно волосатым. – blparker

1

Вы не можете измерить расстояние двух строк непосредственно в Access. Вы должны реализовать подходящую метрику, которая вычисляет расстояние - существует много разных способов ее вычисления.

Редактировать: Вы можете посмотреть this Wikipedia entry, который описывает возможности очень хорошо. Levenshtein Расстояние Mitch рекомендует это очень хорошее и простое решение для решения этой проблемы.

1

То, что вы пытаетесь сделать, это называется нечетким соответствием, и это довольно сложно кода - см http://search.cpan.org/dist/String-Approx/Approx.pm

Я пытался делать это с помощью комбинации функций SQL и VBA и сдался, потому что там было так много исключений , Наилучшим результатом, который я смог придумать в конце, было следующее:

(1) Используется клубника perl для подключения к db ms-access с использованием модуля win32 perl;

(2) Запросить sql-запросы от perl для получения двух строк соединения;

(3) Используемый модуль perl String :: Approx для сравнения нечетких строк - это возвращает 1 для идеального соответствия и уменьшающееся число меньше 1 для несовершенного соответствия.

(4) Добавил номер нечеткого соответствия обратно в ms-доступ через SQL-запрос.

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