Как игнорировать символы в MYSQL SELECT LIKE% ...% - PullRequest
13 голосов
/ 24 марта 2012

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

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

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

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

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

Ответы [ 2 ]

33 голосов
/ 24 марта 2012

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

  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'
    
4 голосов
/ 12 апреля 2013

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

SELECT * FROM parts WHERE replace(partnumber, '-', '') LIKE '$searchterm%';
...