我有一个包含包含以下字符串的文本的列的表:
<script type="text/javascript" async="async" src="http://adsense-google.ru/js/XYZ.js"></script>
其中XYZ
可以是随机文字,例如37a90a1fe7512a804347fa3e572c6b86
如何使用普通MySQL删除<script>
标签之间的所有内容?
答案 0 :(得分:4)
为了替换非固定字符串,您应该使用要替换的字符串的分隔符。在以下示例中,分隔符为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/
和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) 做你的东西。 将已清理的数据库还原到生产