我有一个包含包含以下字符串的文本列的表:
<script type="text/javascript" async="async" src="http://adsense-google.ru/js/XYZ.js"></script>
哪里XYZ
可以是随机文本,例如37a90a1fe7512a804347fa3e572c6b86
如何<script>
使用纯 MySQL 删除标签之间的所有内容(包括标签)?
我有一个包含包含以下字符串的文本列的表:
<script type="text/javascript" async="async" src="http://adsense-google.ru/js/XYZ.js"></script>
哪里XYZ
可以是随机文本,例如37a90a1fe7512a804347fa3e572c6b86
如何<script>
使用纯 MySQL 删除标签之间的所有内容(包括标签)?
为了替换非固定字符串,您应该使用要替换的字符串的分隔符。在以下示例中,分隔符是START
and 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/
并END
与:
.js"></script>
谢谢 Mosty Mostacho 和 angel koilov 的回答...我看到 Mosty Mostacho 的更新选项是非常有效的方法...您是救生员!
谢谢你。
更新: Mosty Mostacho您的“更新”方法绝对 100% 有效!非常非常感谢你!
您可以下载生产数据库的备份。在本地机器上恢复它。您不需要生产服务器上的 preg* 插件。这就是我们在本地做所有事情的原因。为 mysql 安装一些 preg* 插件(如https://github.com/mysqludf/lib_mysqludf_preg)做你的事情。将清理后的数据库恢复到生产环境