Mysql regex поиск по массиву телефонных номеров - PullRequest
0 голосов
/ 08 мая 2018

Требуется помощь в выполнении запроса к базе данных клиентов в поле с именем phone.

select * from customers where phone REGEXP '123456|565834'

Мне нужен способ выбрать подходящую часть регулярного выражения в предложении select. Окончательные результаты должны быть примерно такими:

 Name      Matched      Phone

 Naveen    123456      12345678
 Naveen2   123456     123456789
 Arun      565834       9565834
 Arun2     565834      10565834

P.S. Это должен быть один запрос, и нет другого уникального ключа, который можно сгруппировать с помощью

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

Используйте функцию INSTR MySQL. Ex. INSTR (regex, phone)

выберите SUBSTRING ( '123456 | 565834', INSTR ( '123456 | 565834', телефон), 10)
от клиентов, у которых телефон REGEXP '123456 | 565834';

https://www.techonthenet.com/oracle/functions/instr.php

0 голосов
/ 08 мая 2018

Если вы не обязаны использовать только mysql, попробуйте с помощью сценария оболочки + mysql передать значения карты и выполнить поиск - не уверен, что правильно понял требование.

search="5672C";
mysql <connection details> -e "select fields, \"$search\" as matched from customers where phone like \"%$search%\";"

Мы можем зациклить строки карты и достичь.

0 голосов
/ 08 мая 2018

Вы можете использовать выражение CASE здесь:

SELECT
    Name,
    CASE WHEN Phone REGEXP '123456' THEN '123456'
         WHEN Phone REGEXP '565834' THEN '565834' END AS Matched,
    Phone
FROM customers
WHERE
    phone REGEXP '123456|565834';

Обратите внимание, что вам не обязательно использовать REGEXP в этом случае, LIKE, вероятно, было бы достаточно. Но использование REGEXP проще для чтения IMO, а также позволяет обрабатывать более сложную логику, если вам это понадобится в будущем.

...