sql сравнить две строки в MS access - PullRequest
0 голосов
/ 06 октября 2009

Я пытаюсь сравнить ряд строк, как показано ниже

rodeo     rodas
carrot    crate
GLX       GLX 1.1
GLX       glxs

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

возможно ли это прямо в запросе в ACCESS

спасибо

Ответы [ 3 ]

2 голосов
/ 06 октября 2009

За исключением использования LIKE, это невозможно напрямую в запросе в MS Access. Вам нужно будет реализовать какую-то функцию Расстояние Левенштейна для приблизительного соответствия.

1 голос
/ 09 октября 2009

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

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

(1) Использовать клубничный Perl для подключения к базе данных ms-access с использованием модуля Perl Win32;

(2) Выполнил sql запросы от perl, чтобы получить две строки подключения;

(3) Использовал модуль Perl's String :: Approx для сравнения нечетких строк - для идеального совпадения возвращается 1, а для несовершенного - меньше 1.

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

1 голос
/ 06 октября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...