Mysql 正则表达式搜索 phone 个数字数组

Mysql regex search over an array of phone numbers

需要帮助在名为 phone 的字段上对客户数据库执行查询。

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

我需要一种方法来 select 在 select 子句中匹配的正则表达式的匹配部分。 最终结果应该类似于

 Name      Matched      Phone

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

P.S。这必须是一个查询,并且没有其他唯一键可以按 with

分组

您可以在此处使用 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';

请注意,在这种情况下您不一定需要使用 REGEXPLIKE 可能就足够了。但是使用 REGEXP 更容易阅读 IMO,而且它还可以让您处理更复杂的逻辑,如果您将来需要的话。

使用MySQL的INSTR功能。 前任。 INSTR(regex, phone)

SELECT SUBSTRING('123456|565834',INSTR('123456|565834',phone),10)  
FROM customers 
WHERE phone REGEXP '123456|565834';

Doc: INSTR function

如果您不限于只能使用 mysql,则可以尝试使用 shell 脚本 + mysql 来传递地图值和搜索 - 不确定是否正确理解了要求.

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

我们可以循环映射字符串并实现。