下面是一些尝试与一些不同的测试字符串。当你认为合适时,肯定会增加更多。试图从用户可以输入任何内容的文本块中选择将永远不会100%。这将尝试选择ARTICLE_BODY,其中它包含至少9但不超过11个字符的字符串,其中包含一个或多个X或一个或多个数字或一个或一个或两个可选的破折号,同时处理字符串多行和不区分大小写( where子句使用REGEXP_LIKE)。然后用三个方括号将比赛包围起来,以使比赛在输出中突出显示,供您验证。请注意,第9行被选中,因为它符合条件,即使它不是SSN。这会发生,恐怕取决于用户输入的内容。确保这些数据的使用者知道这些结果不能被验证为100%准确。谁知道可以输入什么。只要确保正则表达式能够处理尽可能多的条件,就像你知道的那样。祝你好运!
SQL> with articles(line, article_body) as (
select 1, 'aaXXX-XX-1234aa' from dual union
select 2, '123-45-6789' from dual union
select 3, '123456789' from dual union
select 4, 'XXXXXXXXX' from dual union
select 5, 'XXXXX.XXXX' from dual union
select 6, 'efs' from dual union
select 7, 'Some user might enter XXX-XX-1234, some might enter 123-34-567, some might enter XXXXXXXXX,
hem, I try this in SQL and it work but when i copy the code into oracle-sqldev it came back with error messa
he heck is going on but I cant seem to figure it out.' from dual union
select 8, '123' from dual union
select 9, 'X12345678X' from dual
)
select line, regexp_replace(article_body, '((X+|\d+|-{1,2}?){9,11})', '[[[\1]]]', 1, 0, 'im') Possible_ssns
from articles
where regexp_like(article_body, '(X+|\d+|-{1,2}?){9,11}', 'im')
order by line;
LINE POSSIBLE_SSNS
---------- --------------------------------------------------
1 aa[[[XXX-XX-1234]]]aa
2 [[[123-45-6789]]]
3 [[[123456789]]]
4 [[[XXXXXXXXX]]]
7 Some user might enter [[[XXX-XX-1234]]], some migh
t enter [[[123-34-567]]], some might enter [[[XXXX
XXXXX]]], some might enter [[[123456789]]] - I nee
d to find ALL of them, I try this in SQL and it wo
rk but when i copy the code into oracle-sqldev it
came back with error message and I try for a few d
ays now to figure out what the heck is going on bu
t I cant seem to figure it out.
9 [[[X12345678X]]]
6 rows selected.
SQL>
什么是错误消息,你确定你正在运行相同的查询吗?帮助我们帮助你! – kevinsky
嗨,我只是复制和过去的错误代码,我意识到我错过了'在后面,所以没有错误,但它给我的一切在“ARTICLE_BODY”,即使是那些只有简单的文本。对不起,我没有澄清“ARTICLE_BODY”只是一个文本框..用户可以输入随机的东西 – thaibythai
在最后的评论后,不清楚你是否仍然有错误或你想解决什么问题。请相应地编辑您的问题。 – Alfabravo