Ini sangat aneh, saya sendiri telah berjuang dengan masalah ini berkali-kali, selama 15 tahun terakhir dan umumnya muncul dengan struktur yang memisahkan kode area, kode negara, dan nomor ke dalam bidang yang terpisah, dll. Tetapi ketika membaca pertanyaan Anda, solusi lain baru saja muncul di kepala saya, itu memang membutuhkan bidang yang terpisah, jadi mungkin tidak sesuai untuk Anda.
Anda dapat memiliki bidang terpisah yang disebut reverse_phone_number, minta ini diisi secara otomatis oleh mesin DB kemudian ketika orang mencari cukup membalikkan string pencarian dan menggunakan bidang terbalik yang diindeks hanya dengan % di akhir string seperti, sehingga memungkinkan penggunaan indeks.
Bergantung pada mesin DB Anda, Anda mungkin dapat membuat indeks berdasarkan fungsi yang ditentukan pengguna yang melakukan kebalikannya agar Anda tidak memerlukan bidang tambahan.
Di beberapa negara, mis. Inggris, Anda mungkin memiliki masalah dengan angka nol di depan. Nomor telepon UK direpresentasikan sebagai (kode area) (Nomor Telepon) mis. 01634 511098, ketika ini diinternasionalkan, nol di depan kode area dihapus dan kode panggil internasional (+ atau 00) dan kode negara (44) ditambahkan. Ini menghasilkan nomor telepon internasional +441634511098. Setiap pengguna yang mencari 0163451109 tidak akan menemukan nomor telepon jika dimasukkan dalam format internasional. Anda dapat mengatasi masalah ini dengan menghapus nol di depan dari string pencarian.
EDIT Berdasarkan saran dari Ollie Jones Anda harus menyimpan nomor seperti yang dimasukkan oleh pengguna dan kemudian menghapus angka nol di depan, tanda baca dan spasi dari nomor tersebut sebelum membalikkan dan menyimpan di bidang terbalik. Kemudian cukup gunakan algoritme yang sama untuk menghapus string pencarian sebelum membalik, temukan catatan dan kemudian tampilkan kembali nomor yang dimasukkan ke pengguna.