Postgres fornisce un modulo con diverse funzioni di confronto di stringhe come soundex e metaphone. Ma vorrai usare la funzione di modifica della distanza di levenshtein.
Example:
test=# SELECT levenshtein('GUMBO', 'GAMBOL');
levenshtein
-------------
2
(1 row)
Il 2
è la distanza di modifica tra le due parole. Quando lo applichi a un numero di parole e ordini in base al risultato della distanza di modifica, avrai il tipo di corrispondenze sfocate che stai cercando.
Prova questo esempio di query:(con i tuoi nomi di oggetti e dati ovviamente)
SELECT *
FROM some_table
WHERE levenshtein(code, 'AB123-lHdfj') <= 3
ORDER BY levenshtein(code, 'AB123-lHdfj')
LIMIT 10
Questa query dice:
Dammi i primi 10 risultati di tutti i dati da some_table in cui la distanza di modifica tra il valore del codice e l'input 'AB123-lHdfj' è inferiore a 3. Recupererai tutte le righe in cui il valore del codice è entro 3 caratteri di differenza da ' AB123-lHdfj'...
Nota:se ricevi un errore del tipo:
function levenshtein(character varying, unknown) does not exist
Installa fuzzystrmatch
estensione utilizzando:
test=# CREATE EXTENSION fuzzystrmatch;