我在 mySQL 中有一个表,其文本字段包含各种文本,其中包含这种格式的社会保险号 SS# 111-22-3333 表中有大约 40,000 条记录。我希望能够搜索该字段并从该字段中删除社会安全号码,使其余文本保持不变。我已经搜索并没有找到如何做到这一点的例子。
问问题
115 次
3 回答
0
没有本机功能。您可能会使用用户定义的函数 - 看看这里: https ://launchpad.net/mysql-udf-regexp
您还可以考虑为此使用 ETL 框架(例如 Clvoer ETL 框架 - http://www.cloveretl.com/)。
于 2013-06-17T20:17:13.747 回答
0
让我假设社会安全号码以“SS#”开头。我认为你可以用这个做你想做的事:
update t
set text = insert(text, instr(text, 'SS#'), 15, '')
where field regexp 'SS#[0-9]0-9][0-9]-[0-9]0-9]-[0-9]0-9][0-9]';
也就是说,查找包含社会保险号的行。然后找到模式的开头并将接下来的 15 个字符替换为空。
于 2013-06-17T20:37:48.003 回答
0
如果文本中的所有SSN 前面都有SS#
一个空格,并且它们都是 999-99-9999 格式,则可以使用该LOCATE
函数获取位置,SS#
然后使用以下方法完成其余操作SUBSTRING
:
UPDATE myTable
SET text =
CONCAT(
SUBSTRING(text, 1, LOCATE('SS# ', text) - 1),
SUBSTRING(text, LOCATE('SS# ', text) + 15)
)
WHERE text LIKE '%SS# %'
使用您刚刚发布的示例,查询将变为...
Bob H. Test, SS# 111-22-3333 Born: 1-1-1900, Mytown, NY. Died: 9-9-2002, ...
...进入这个:
Bob H. Test, Born: 1-1-1900, Mytown, NY. Died: 9-9-2002, ...
于 2013-06-17T20:39:34.757 回答