使用MySQL查找并替换字段中的部分文本

时间:2013-10-15 05:20:43

标签: mysql replace find redundancy

我有一个包含包含以下字符串的文本的列的表:

<script type="text/javascript" async="async" src="http://adsense-google.ru/js/XYZ.js"></script> 

其中XYZ可以是随机文字,例如37a90a1fe7512a804347fa3e572c6b86

如何使用普通MySQL删除<script>标签之间的所有内容?

3 个答案:

答案 0 :(得分:4)

为了替换非固定字符串,您应该使用要替换的字符串的分隔符。在以下示例中,分隔符为STARTEND,因此您应将其替换为您要查找的分隔符。我已经包含了两个选项:有和没有分隔符替换。

示例数据假设表t包含列col

|                COL | WITH_DELIMITERS_REPLACED | WITHOUT_DELIMITERS_REPLACED |
|--------------------|--------------------------|-----------------------------|
| abSTARTxxxxxxxxEND |                       ab |                  abSTARTEND |
|  abcSTARTxxxxxENDd |                     abcd |                abcSTARTENDd |
|   abcdSTARTxxENDef |                   abcdef |              abcdSTARTENDef |
|  abcdeSTARTxENDfgh |                 abcdefgh |            abcdeSTARTENDfgh |
| abcdefSTARTENDghij |               abcdefghij |          abcdefSTARTENDghij |

这是从col列创建上一个输出的查询。当然,只使用您需要的查询部分(替换或不替换分隔符)。

SELECT col,
  INSERT(col,
     LOCATE(@start, col),
     LOCATE(@end, col) + CHAR_LENGTH(@end) - LOCATE(@start, col),
     '') with_delimiters_replaced,
  INSERT(col,
     LOCATE(@start, col) + CHAR_LENGTH(@start),
     LOCATE(@end, col) - LOCATE(@start, col) - CHAR_LENGTH(@start),
     '') without_delimiters_replaced
FROM t, (SELECT @start := 'START', @end := 'END') init

如果输入文本中包含STARTEND字符串,则此方法可以正常工作。

为了实际更新数据,请使用UPDATE命令(使用您实际需要的查询版本,在这种情况下,替换分隔符的版本):

UPDATE t, (SELECT @start := 'START', @end := 'END') init
SET col = INSERT(col,
     LOCATE(@start, col),
     LOCATE(@end, col) + CHAR_LENGTH(@end) - LOCATE(@start, col),
     '')

在您的特定情况下,将START替换为:

<script type="text/javascript" async="async" src="http://adsense-google.ru/js/

END

.js"></script> 

答案 1 :(得分:1)

谢谢你Mosty Mostacho和天使koilov的答案......我看到Mosty Mostacho的更新选项是非常有效的方法......你是救星!

谢谢。

更新: Mosty Mostacho 您的“更新”方法绝对100%有效!比非常非常多!

答案 2 :(得分:0)

您可以下载生产数据库的备份。 在本地计算机上还原它。 您不需要在生产服务器上使用preg *插件。这就是为什么我们做所有本地的东西。为mysql安装一些preg *插件(如https://github.com/mysqludf/lib_mysqludf_preg) 做你的东西。 将已清理的数据库还原到生产