O Postgres fornece um módulo com várias funções de comparação de strings, como soundex e metaphone. Mas você vai querer usar a função de distância de edição levenshtein.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
O
2
é a distância de edição entre as duas palavras. Quando você aplica isso a um número de palavras e classifica pelo resultado da distância de edição, você terá o tipo de correspondência difusa que está procurando. Experimente este exemplo de consulta:(com seus próprios nomes de objetos e dados, é claro)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Esta consulta diz:
Dê-me os 10 principais resultados de todos os dados de some_table onde a distância de edição entre o valor do código e a entrada 'AB123-lHdfj' é menor que 3. Você receberá de volta todas as linhas onde o valor do código está dentro de 3 caracteres de diferença para ' AB123-lHdfj'...
Nota:se você receber um erro como:
function levenshtein(character varying, unknown) does not exist
Instale o
fuzzystrmatch
extensão usando:test=# CREATE EXTENSION fuzzystrmatch;