MYSQL-在正则表达式中将变量与正则表达式一起使用以获取记录

时间:2018-09-27 07:26:47

标签: mysql sql regex

表中有字符串

+1-123-456-7890 
11234567890
+1 1234567890
1777555999

我有变量$phoneNumber。我想在sql查询中传递变量以获取匹配的记录。 例: $phoneNumber保留值1234567890 并使用相同的变量,我想在一个查询中获取以下记录

+1-123-456-7890 
11234567890
+1 1234567890

我想在一个查询中选择两个记录。 如何将数据(11234567890)与上面保存的数字进行匹配?

5 个答案:

答案 0 :(得分:2)

我们可以按照此处已经建议的替换逻辑结合正则表达式来执行此操作,以仅匹配您要定位的格式的电话号码:

WITH yourTable AS (
    SELECT '+1-123-456-7890' AS phone UNION ALL
    SELECT '+1 1234567890' UNION ALL
    SELECT '+6512345678'
)

SELECT
    phone,
    REPLACE(REPLACE(REPLACE(phone, ' ', ''), '+', ''), '-', '') AS common_phone
FROM yourTable
WHERE phone REGEXP '\\+[0-9][[:space:]-][0-9]{3}-?[0-9]{3}-?[0-9]{4}';

enter image description here

Demo

答案 1 :(得分:0)

尝试一下!

正则表达式:

 [\+]?[0-9](?:[-| ])?\d{3}[-]?\d{3}[-]?\d{4}

通过regxe101验证:

enter image description here

答案 2 :(得分:0)

如果$phonenumber和您的字符串列都(可能)都具有麻烦的字符,那么用正则表达式很难解决。

where replace(replace(replace($phonenumber, ' ', ''), '-', ''), '+') = replace(replace(replace(phonecol, ' ', ''), '-', ''), '+')

答案 3 :(得分:0)

我在查询中使用replace()解决了这个问题。 我从变量$phoneNumber中删除了特殊字符(不是通过sql,而是在将varable传递给sql之前),并将其与replace的字符串结果进行了比较。 SELECT phone FROM myTable where REPLACE(REPLACE(REPLACE(phone, ' ', ''), '+', ''), '-', '') = $phoneNumber;

答案 4 :(得分:0)

重新考虑总体设计。

将电话号码之前放入表格中。这样,SELECT和其他尚未写入的SELECTs就会很简单。