MySQL шаблон заменить - PullRequest
       5

MySQL шаблон заменить

0 голосов
/ 21 августа 2009

Можно ли сделать немного более сложную замену строк в запросе MySQL? Я читал о методе REPLACE(), но, насколько мне известно, его нельзя использовать для причудливых вещей.

По сути, я пытаюсь удалить все теги HTML из определенного столбца в большом наборе данных. Возможность сделать это в одном запросе будет намного круче, чем использование PHP для промежуточной обработки. Могу ли я сделать что-нибудь элегантное, чтобы удалить все, что заключено в < >?

Я только что понял, что есть еще одна маленькая хитрость ... из-за некоторых неправильных преобразований данных, некоторые теги теперь содержат <и> сами ... В худшем случае выглядят как <(><<)>b>. Даже не спрашивай как, но что-то, похоже, пошло не так. Во всяком случае, великие умы с отличными идеями на этот счет?

Ответы [ 3 ]

2 голосов
/ 21 августа 2009

Краткий ответ: нет, это нельзя сделать в SQL.Это та работа, которую вам нужно выполнить на языке программирования - на любом языке программирования, который у вас есть под рукой, на самом деле.

Учитывая, что это не правильный HTML, синтаксический анализ его традиционными методами может даже оказаться невозможнымвопроса.Возможно, вам помогут какие-то ужасные хакерские регулярные выражения, или, может быть, вам придется потратить некоторое время на поиск определенных «глючных» строк (например, если обычно появляется (><<)>) и их удаление с помощью традиционных REPLACE().

Детали, конечно, будут зависеть от ваших данных и имеющихся у вас инструментов, но MySQL не сможет выполнить большую часть этой работы.

1 голос
/ 21 августа 2009

Вы можете взломать функцию, но я не думаю, что это путь.

CREATE FUNCTION strip_tags( String VARCHAR(9999) )
RETURNS VARCHAR(9999)
DETERMINISTIC 
BEGIN
  DECLARE start, end, len INT;
    SET start = LOCATE('<', String);
    SET end = LOCATE('>', String, start);
    WHILE start> 0 AND end > 0 DO
      BEGIN
        SET String = INSERT(String, start, end, '');
        SET start = LOCATE('<', String);
        SET end = LOCATE('>', String, start);
      END;
    END WHILE;
  RETURN String;
END;

Отказ от ответственности: код не проверен.

0 голосов
/ 21 августа 2009

Извините, вам не повезло. MySQL не имеет регулярных выражений или сопоставимых факультетов замены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...