SELECT ABS($user_value - numeric_field) as nearest, ...
FROM yourtable
ORDER BY nearest ASC
LIMIT 1
neem in feite het verschil van het gewenste getalveld en de door de gebruiker opgegeven waarde, sorteer vervolgens oplopend op het verschil en retourneer vervolgens de eerste rij.
Dus een exacte overeenkomst zou een verschil van 0 hebben en als eerste uitkomen. En kies dan degene die het "dichtstbijzijnde" is als er geen exacte overeenkomst is.