I don't think this is a good solution because it is retrieving all the rows from the database and then iterating over them to find a match.
Do you have the option of sanitizing a phone number before it is stored in the database? Or, could you create a new 'sanitized' phone number field that you could select over?
Either that, or take the value you're looking for an parse it in to all the possible ways it could be stored and then search for those options.
Ex
phone_numbers = ['+31123456789', '+31-(0)123 456 789', '+31-0 123 456 789', etc.]
db(db.table.phonenumber.belongs(phone_numbers)).select()
-Jim