mysql-在select查询中使用带有regex的变量来获取记录

xtfmy6hx  于 2021-06-18  发布在  Mysql
关注(0)|答案(5)|浏览(478)

表中有字符串

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

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

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

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

ndasle7k

ndasle7k1#

试试这个!
正则表达式:

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

通过regxe101验证:

vd2z7a6w

vd2z7a6w2#

重新考虑整体设计。
在把电话号码放进table之前先把它们清理干净。然后呢 SELECT ,另一个呢 SELECTs 那些还没有写好的,将会很简单。

vngu2lb8

vngu2lb83#

如果两者都有 $phonenumber 字符串列可能都有麻烦的字符,这很难用正则表达式解决。

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

wqsoz72f4#

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

kupeojn6

kupeojn65#

我们可以按照这里已经建议的替换逻辑结合正则表达式来执行此操作,以便仅将电话号码与您想要的目标格式匹配:

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}';

演示

相关问题