Postgres предоставляет модуль с несколькими функциями сравнения строк, такими как soundex и metaphone. Но вы захотите использовать функцию редактирования расстояния Левенштейн .
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
2
- это расстояние редактирования между двумя словами. Когда вы примените это к нескольким словам и отсортируете по результату расстояния редактирования, у вас будет тип нечетких совпадений, которые вы ищете.
Попробуйте этот пример запроса: (с вашими собственными именами объектов и данными, конечно)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Этот запрос говорит:
Дайте мне первые 10 результатов всех данных из some_table, где расстояние редактирования между значением кода и входом 'AB123-lHdfj' меньше 3. Вы получите все строки, где значение кода находится в пределах 3 символов. разница с 'AB123-lHdfj' ...
Примечание: если вы получаете сообщение об ошибке типа:
function levenshtein(character varying, unknown) does not exist
Установите расширение fuzzystrmatch
, используя:
test=# CREATE EXTENSION fuzzystrmatch;