1

我在 mySQL 中有一个表,其文本字段包含各种文本,其中包含这种格式的社会保险号 SS# 111-22-3333 表中有大约 40,000 条记录。我希望能够搜索该字段并从该字段中删除社会安全号码,使其余文本保持不变。我已经搜索并没有找到如何做到这一点的例子。

4

3 回答 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 回答