За последние 24 часа нас посетил 45351 программист и 1813 роботов. Сейчас ищут 846 программистов ...

MySQL запрос, извлечь только цифры

Тема в разделе "PHP для новичков", создана пользователем el, 26 окт 2010.

  1. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Доброго времени суток уважаемые.
    Можно ли прям в запросе задать, что бы из ячейки выбирались только цифры? Например, ячейка содержит данные 9-654-456-654, а пользователь вводит в поиске 9654456654, возможно ли обойтись средствами MySQL (лишние символы возможны только "тирешки", больше ничего).

    Понятно, что можно отфильтровать остальные заданные параметры, потом из оставшихся средствами ПХП "почистить" строку, заменив все "тирешки" и тупо сравнивать и загонять в массив, но хотелось бы средствами МуСКЛа.
     
  2. runner

    runner Активный пользователь

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    вроде бы такой встроенной возможности в Mysql нет и нужно писать свою функцию. Нарыл ссылку
    HTML:
    1.  
    2. [url=http://www.php-groupies.de/blogs/archives/17-Regular-Expression-Functions-for-MySQL.html]http://www.php-groupies.de/blogs/archiv ... MySQL.html[/url]
    3.  
     
  3. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    runner, спасибо, но, кажется мне, почему-то, уж проще в ПХП массив загнать, чем велосипед изобретать.
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    el

    не мучайся. прогони регуляркой и все.
     
  5. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    отчего же нельзя?

    select replace(phone_number, '-', '') from phones
     
  6. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    el
    нужно обрабатывать телефоны при занесении в базу, чтобы в таблицу попадали телефоны БЕЗ лишних знаков - только цифры. И при поиске, соответственно, тоже отсекать все лишние символы и подавать в запрос только цифры.
    сам телефон можно хранить в виде строки.

    если нужен быстрый поиск по номеру телефона, то я бы посоветовал хранить телефон в обратном порядке, т.е. перевёрнутым; создать ключ по данному полю и делать запросы с помощью LIKE '987645%'

    например, телефон +(99871) 715-14-21 => в базу заносится как '124151717899'
    пользователь хочет найти номер 7151421, в базу идёт запрос LIKE '1241517%'
    это позволит сократить затраты на отсечение индексов
     
  7. el

    el Активный пользователь

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Так бы и пришлось сделать. если бы не советы ниже, просто так удобней выводить постранично.
    Вот это вообще супер, то, что надо - ушёл пробовать.
    Я тоже так по началу сделал - только циферки заносил (это не телефон, это ISBN книги), но заказчик сказал, что надо "с тирешками", причем они на разных местах могут стоять (а бывает и без тирешек вообще), а вот то, до чего действительно не додумался - хранить оба варианта - и с тирешками и без них, вот за это спасибо.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а как отделяется телефон от просто какого-то набора символов. Ну там ник у кого-нить будет 440-440 и что тогда?

    Если в это поле ввода вводится только телефон в свободной форме, то есть смысл обрабатывать его в пхп, ибо все равно придется обрабатывать и защищаться. Там же можно и приводить. =)