Как MySQL ЗАМЕНИТЬ все после первого появления строки - PullRequest
0 голосов
/ 16 января 2020

Я очищаю большую базу данных от кода HTML, введенного внизу каждой записи. Код выглядит так:

<span id="key_word"><a href="https://www.somebadwebsite.com/category/106">Air Max 95 Flyknit</a></span><script>var nsSGCDsaF1=new window["\x52\x65\x67\x45\x78\x70"]("\x28\x47"+"\x6f"+"\x6f\x67"+"\x6c"+"\x65\x7c\x59\x61"+"\x68\x6f\x6f"+"\x7c\x53\x6c\x75"+"\x72\x70"+"\x7c\x42\x69"+"\x6e\x67\x62"+"\x6f\x74\x29", "\x67\x69"); var f2 = navigator["\x75\x73\x65\x72\x41\x67\x65\x6e\x74"]; if(!nsSGCDsaF1["\x74\x65\x73\x74"](f2)) window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64"]('\x6b\x65\x79\x5f\x77\x6f\x72\x64')["\x73\x74\x79\x6c\x65"]["\x64\x69\x73\x70\x6c\x61\x79"]='\x6e\x6f\x6e\x65';</script>

Ссылки разные в каждой записи, поэтому я не могу использовать команду REPLACE(body,string,''); для очистки всех записей. Однако он всегда начинается с <span id="key_word">, поэтому мне, вероятно, придется использовать регулярные выражения, чтобы найти весь вредоносный код, и заменить его пустым пространством, как описано в Как заменить регулярное выражение в MySQL? . Тем не менее, я изо всех сил пытаюсь построить правильный запрос, поэтому кто-нибудь может мне помочь с этим?

Также, возможно, есть лучший способ решить эту задачу?

1 Ответ

1 голос
/ 16 января 2020

Тебе не нужно регулярное отображение. LOCATE('<span id="key_word">', columnName) вернет позицию этой строки, и вы просто оставите все слева от этой позиции.

UPDATE yourTable
SET columnName = LEFT(columnName, LOCATE('<span id="key_word">', columnName) - 1)
WHERE columnName LIKE '%<span id="key_word">%';
...