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';
请注意,在这种情况下您不一定需要使用 REGEXP
,LIKE
可能就足够了。但是使用 REGEXP
更容易阅读 IMO,而且它还可以让您处理更复杂的逻辑,如果您将来需要的话。
使用MySQL的INSTR
功能。
前任。 INSTR(regex, phone)
SELECT SUBSTRING('123456|565834',INSTR('123456|565834',phone),10)
FROM customers
WHERE phone REGEXP '123456|565834';
如果您不限于只能使用 mysql,则可以尝试使用 shell 脚本 + mysql 来传递地图值和搜索 - 不确定是否正确理解了要求.
search="5672C";
mysql <connection details> -e "select fields, \"$search\" as matched from customers where phone like \"%$search%\";"
我们可以循环映射字符串并实现。
需要帮助在名为 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';
请注意,在这种情况下您不一定需要使用 REGEXP
,LIKE
可能就足够了。但是使用 REGEXP
更容易阅读 IMO,而且它还可以让您处理更复杂的逻辑,如果您将来需要的话。
使用MySQL的INSTR
功能。
前任。 INSTR(regex, phone)
SELECT SUBSTRING('123456|565834',INSTR('123456|565834',phone),10)
FROM customers
WHERE phone REGEXP '123456|565834';
如果您不限于只能使用 mysql,则可以尝试使用 shell 脚本 + mysql 来传递地图值和搜索 - 不确定是否正确理解了要求.
search="5672C";
mysql <connection details> -e "select fields, \"$search\" as matched from customers where phone like \"%$search%\";"
我们可以循环映射字符串并实现。