我有一个巨大的VARCHAR字段,这是一个电子邮件的正文。电子邮件的任何一侧都可能有任何类型的文字。我想知道是否有人在文本的任何地方列出了他们的社会安全号码。
在WHERE子句中,我尝试了
WHERE X.Description LIKE '%___-__-____%'
有没有办法找到一个看起来像111-11-1111或111 11 1111
的数字字符串答案 0 :(得分:1)
使用正则表达式
How to detect if a string contains at least a number?
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql
WHERE X.Description LIKE ''[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]'
答案 1 :(得分:1)
WHERE X.Description LIKE '%[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]%'
答案 2 :(得分:1)
我不认为您可以保证SSN的分隔符始终是连字符。在SQL Server中,您可以使用like
找到示例:
where X.Description LIKE '%[0-9][0-9][0-9][- ][0-9][0-9][0-9][- ][0-9][0-9][0-9][0-9]%'
在MySQL中,您将使用正则表达式:
where X.Description regexp '[0-9]{3}[- ][0-9]{3}[- ]{4}'
答案 3 :(得分:1)
我会在每个括号和%之间添加一个空格,以便像这样安全:
WHERE X.Description LIKE '% [0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9] %'
否则代码会错误地认为这样的东西是SSN:12343444-76-878787878