数据库
首页 > 数据库> > 使用MySQL查找并替换字段中的部分文本

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

作者:互联网

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

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

XYZ可以是随机文本,例如37a90a1fe7512a804347fa3e572c6b86

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

解决方法:

为了替换非固定字符串,您应该使用要替换的字符串的分隔符.在下面的示例中,分隔符是START和END,因此您应该将它们替换为您要查找的分隔符.我已经包含了两个选项:有和没有分隔符替换.

假设表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

如果输入文本中包含START和END字符串,则此方法可以正常工作.

为了实际更新数据,请使用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/

并结束:

.js"></script> 

标签:redundancy,mysql,replace,find
来源: https://codeday.me/bug/20190831/1775732.html