Postgres proporciona un módulo con varias funciones de comparación de cadenas, como soundex y metaphone. Pero querrá usar la función de distancia de edición de levenshtein.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
El 2
es la distancia de edición entre las dos palabras. Cuando aplica esto a una cantidad de palabras y ordena por el resultado de la distancia de edición, obtendrá el tipo de coincidencias aproximadas que está buscando.
Pruebe este ejemplo de consulta:(con sus propios nombres de objeto y datos, por supuesto)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Esta consulta dice:
Dame los 10 mejores resultados de todos los datos de some_table donde la distancia de edición entre el valor del código y la entrada 'AB123-lHdfj' es menor que 3. Obtendrás todas las filas donde el valor del código está dentro de 3 caracteres de diferencia a ' AB123-lHdfj'...
Nota:si recibe un error como:
function levenshtein(character varying, unknown) does not exist
Instala el fuzzystrmatch
extensión usando:
test=# CREATE EXTENSION fuzzystrmatch;