Това е много странно, аз самият съм се борил с този проблем много пъти през последните 15 години и като цяло измислям структури, които разделят кодове на региони, кодове на държави и номера в отделни полета и т.н. Но докато четях въпроса ви, току-що се появи друго решение в главата ми, изисква отделно поле, въпреки че може да не е подходящо за вас.
Бихте могли да имате отделно поле, наречено reverse_phone_number, да го попълните автоматично от DB машината, а след това, когато хората търсят, просто обръщат низа за търсене и използват индексираното поле за обратна връзка само с % в края на подобен низ, като по този начин позволяват използването на индекс.
В зависимост от вашата DB машина може да сте в състояние да създадете индекс на базата на дефинирана от потребителя функция, която прави обратното вместо вас, премахвайки необходимостта от допълнително поле.
В някои страни, напр. Обединеното кралство, може да имате проблем с водещите нули. Телефонен номер в Обединеното кралство е представен като (код на региона) (телефонен номер), напр. 01634 511098, когато се интернационализира, водещата нула от кода на областта се премахва и се добавят международният код за набиране (+ или 00) и кодът на държавата (44). Това води до международен телефонен номер +441634511098. Всеки потребител, който търси 0163451109, няма да намери телефонния номер, ако е въведен в интернационален формат. Можете да преодолеете този проблем, като премахнете водещите нули от низа за търсене.
РЕДАКТИРАНЕ Въз основа на предложенията на Оли Джоунс трябва да съхраните числото, както е въведено от потребителя, и след това да премахнете водещите нули, препинателните знаци и белите интервали от числото, преди да обърнете и съхраните в обърнатото поле. След това просто използвайте същия алгоритъм, за да премахнете стринга за търсене, преди да обърнете, намерете записа и след това покажете първоначално въведения номер обратно на потребителя.