SQL,SQLYog-在中的列中查找电话号码模式



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

作为我工作的第一项任务,我必须在描述公寓楼的一系列文本中查找电话号码。原因是我们对插入联系信息收取费用。

尽管我已经用SQLyog编写了一个只隔离数字的查询,但我希望通过隔离我有的实例来进一步过滤我的2k+结果

1) 连续10位不带空格即6173274810

2) 10个连续数字,由3位数字、3位数字和4位数字组成,中间有一个空格即855 347 2501

3) 10个连续数字,包含3个数字、3个数字和4个数字,中间有多个空格即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似乎不支持);CCD_ 3意味着必须存在先前值(例如数字)的3。[:space:]是空间的POSIX(同样smysql似乎也不支持)*是零个或多个空间的出现http://www.regular-expressions.info/posixbrackets.html.

最新更新