Как игнорировать символы в MYSQL SELECT LIKE %...%

У меня есть стол с phone столбец, где данные могут содержать пробелы, точки, тире или знаки + между числами. Мне нужно выполнить поиск с подстановочными знаками LIKE, которые игнорируют все эти символы, например:

  • запись может иметь телефон как "+123-456 78.90"
  • запрос, ищущий "6789" или любую полную или неполную последовательность правильных цифр в порядке, должен вызвать эту запись.

К сожалению, я не могу очистить исходную таблицу, чтобы удалить нецифровые символы и выполнить обычный SELECT LIKE%...%.

MYSQL имеет функции для замены / удаления символов из строк, но не может найти способ использовать их в запросе с символом LIKE.

Любая помощь будет высоко ценится.

2 ответа

Решение

Я вижу два способа сделать это:

  1. Если вы разрешите только несколько дополнительных символов, чем вы можете подготовить строку, которая извлекается из этих дополнительных символов, и вы используете оператор LIKE, вы обычно бы

    select * from phoneTable where replace(replace(phone, '+', ''), '-', '') LIKE '%123%'
    

    Конечно, вам нужно столько же вызовов на замену, сколько разрешенных дополнительных символов

  2. Вы используете регулярные выражения, скажем, вы ищете шаблон 123

    select * from phoneTable where phone REGEXP '.*1[^0-9]*2[^0-9]*3'
    

У меня была такая же проблема с номерами партнеров и нежелательными персонажами. Мое решение было

SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%';
Другие вопросы по тегам