SELECT ABS($user_value - numeric_field) as nearest, ...
FROM yourtable
ORDER BY nearest ASC
LIMIT 1
en gros, prenez la différence entre le champ numérique que vous voulez et la valeur fournie par l'utilisateur, puis triez par différence croissante, puis renvoyez la première ligne.
Ainsi, une correspondance exacte aurait une différence de 0 et sortirait en premier. Et puis choisissez celui qui est "le plus proche" s'il n'y a pas de correspondance exacte.