SQL,SQLYog - 在中的列中寻找 phone 数字模式

SQL,SQLYog - Looking for phone number pattern within column in

我最近有机会在学习的同时工作SQL。我对 SQL 语法和实践的了解有限。

作为我这份工作的首要任务之一,我必须在描述公寓大楼的一串文本中寻找 phone 个数字。原因是我们对插入联系信息收费。

虽然我写了一个只用 SQLyog 隔离数字的查询,但我希望通过隔离我有

的实例来进一步过滤我的 2k+ 结果

1) 没有 spaces 的 10 个连续数字 即 6173274810

2) 10 个连续数字,中间有 3 个数字、3 个数字和 4 个数字,中间有一个 space 即 855 347 2501

3) 10 个连续数字,中间有 3 个数字、3 个数字和 4 个数字,中间有一个以上 space 即 622 257 2701

到目前为止,这就是我得到的,

SELECT ac.complex_id, ac.comments,
LENGTH(r.number_string) AS count_of_characters, r.number_string
FROM aptcomplexes ac, manager_center_subscription mcs,

     (SELECT complex_id, LENGTH(comments), comments,
     REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
     REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
     REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
     REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
     REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
     comments, '*', ''), '/',''), 'a', ''), 'b', ''), 'c', ''), 'd', ''), 'e', ''), 'f', ''), 'g', ''), 'h', ''), 'i', ''), 'j', ''), 'k', ''), 'l', ''), 'm', '')
     , 'n', ''), 'o', ''), 'p', ''), 'q', ''), 'r', ''), 's', ''), 't', ''), 'u', ''), 'v', ''), 'w', ''), 'x', ''), 'y', ''), 'z', ''), '.', ''), ',', ''), "’", ''), 'A', ''), 'B', ''), 'C', ''), 'D', ''), 'E', ''),
     'F', ''), 'G', ''), 'H', ''), 'I', ''), 'J', ''), 'K', ''), 'L', ''), 'M', ''), 'N', ''), 'O', ''), 'P', ''), 'Q', ''), 'R', ''), 'S', ''), 'T', ''), 'U', ''), 'V', ''), 'W', ''), "X", ''), 'Y', '')
     , 'Z', ''), '!', ''), "?", ''), '$', ''), 'Z', ''), '-', ''), '(', ''), ')', ''), "&", ''), '*', ''), ':', ''), '"', ''), ';', ''), '@', ''), '|', ''), ';', ''),"\", ''), '+', ''), '[', ''),"]" , ''),"â" , '')
     , "'", ''),"#" , ''),"=" , ''), "¦", ''), "\n", ''), "½", ''), "½", ''), "©", ''), "Ã", ''), "¿", ''), "ï", ''), "%", ''), "Â", ''), "¼", ''), "¡", ''), "³", ''), "¢", ''), "€", ''), "”", '')
     , "_", '') , "‚", '') , "~", '') , "<", '') , ">", '') , "~", ''), "–", '') , "‘", ''), CHAR(10),''), CHAR(9),''), CHAR(13),''), '™',''), 'œ',''), '®','') AS number_string
     FROM aptcomplexes
     GROUP BY complex_id
     ) r

WHERE
ac.complex_id = mcs.complex_id
AND ac.complex_id = r.complex_id
AND LENGTH(r.number_string)>=10
AND mcs.subscription_status='Active'
AND mcs.product_id=1
GROUP BY ac.complex_id
ORDER BY LENGTH(r.number_string) DESC
;

我浏览了整个网站,但没有成功找到我真正要找的东西。我觉得这可能与 "LIKE" 或 "REGEXP." 有关 我相信 JS 将任何类型的数字都视为 \d,SQL 是否有类似的东西,因为“-”帐户所有字符都正确吗?

我确信有其他方法可以解决这个问题,但对我的查询进行一次演习将是最有帮助的。我真的很想学习!另外,如果有详细的解释就好了。

提前感谢您的帮助!

此正则表达式应满足您列出的所有要求。

where column REGEXP '[0-9]{3}[:space:]*[0-9]{3}[:space:]*[0-9]{4}'

[0-9] 表示允许一个数字(也是 \d 但 mysql 似乎不支持); {3} 表示前一个值必须有 3 个(例如一个数字)。 [:space:] 是 space 的 POSIX(\s mysql 似乎也不支持) * 是零或spaces http://www.regular-expressions.info/posixbrackets.html.

的出现次数更多