Как игнорировать символы в MYSQL SELECT LIKE %...%
У меня есть стол с phone
столбец, где данные могут содержать пробелы, точки, тире или знаки + между числами. Мне нужно выполнить поиск с подстановочными знаками LIKE, которые игнорируют все эти символы, например:
- запись может иметь телефон как "+123-456 78.90"
- запрос, ищущий "6789" или любую полную или неполную последовательность правильных цифр в порядке, должен вызвать эту запись.
К сожалению, я не могу очистить исходную таблицу, чтобы удалить нецифровые символы и выполнить обычный SELECT LIKE%...%.
MYSQL имеет функции для замены / удаления символов из строк, но не может найти способ использовать их в запросе с символом LIKE.
Любая помощь будет высоко ценится.
2 ответа
Я вижу два способа сделать это:
Если вы разрешите только несколько дополнительных символов, чем вы можете подготовить строку, которая извлекается из этих дополнительных символов, и вы используете оператор LIKE, вы обычно бы
select * from phoneTable where replace(replace(phone, '+', ''), '-', '') LIKE '%123%'
Конечно, вам нужно столько же вызовов на замену, сколько разрешенных дополнительных символов
Вы используете регулярные выражения, скажем, вы ищете шаблон 123
select * from phoneTable where phone REGEXP '.*1[^0-9]*2[^0-9]*3'
У меня была такая же проблема с номерами партнеров и нежелательными персонажами. Мое решение было
SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%';