SELECT ABS($user_value - numeric_field) as nearest, ...
FROM yourtable
ORDER BY nearest ASC
LIMIT 1
in pratica, prendi la differenza del campo numerico che desideri e il valore fornito dall'utente, quindi ordina in base alla differenza crescente e quindi restituisce la prima riga.
Quindi una corrispondenza esatta avrebbe una differenza di 0 e verrebbe fuori per prima. E poi scegli quello che è "più vicino" se non c'è una corrispondenza esatta.