在文本字段中搜索和替换以删除部分字段

时间:2013-06-17 20:13:56

标签: mysql

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

3 个答案:

答案 0 :(得分:0)

没有原生功能。您可以使用用户定义的函数 - 看看这里: https://launchpad.net/mysql-udf-regexp

您也可以考虑使用ETL框架(例如Clvoer ETL Framework - http://www.cloveretl.com/)。

答案 1 :(得分: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个字符。

答案 2 :(得分: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, ...