Удалить ВСЕ или определенный непечатаемый символ из столбца в MySQL
Я хочу удалить все ИЛИ определенный непечатаемый символ из моего столбца в MySQL. Я думаю, что это может быть достигнуто с помощью функции regexp_replace(), но как это я не знаю. Непечатаемые символы имеют значение Ascii от o до 31. У меня было одно решение Think, как показано ниже: ЕСЛИ я пишу функцию, которая читает все символы из входной строки один за другим и конвертирует в ASCII. Затем каждый раз я сравниваю это значение Ascii с входным значением ascii и, если оно совпадает, заменяет его, и моя функция возвращает замененную строку. Но в моем приложении данные всегда находятся в большом количестве, поэтому я думаю, что это займет много времени для обработки, даже если я использую запрос выбора и мою пользовательскую функцию. Поэтому я хочу альтернативный способ выполнить эту задачу. Я думаю, что regexp_replace() будет здорово, но я не знаю, как его использовать
Пожалуйста помоги
Спасибо, Ронак
2 ответа
DROP function IF EXISTS mysql_replaceallnonprintablecharacters;
CREATE function mysql_replaceallnonprintablecharacters (data VARCHAR(1024))
returns VARCHAR(1024)
begin
DECLARE i INT DEFAULT 0;
DECLARE finaldata VARCHAR(1024) DEFAULT '';
SET FINALDATA:=data;
WHILE i < 31 do
SET FINALDATA:=REPLACE(finaldata, CHAR(i), '');
SET i := i+1;
end WHILE;
RETURN finaldata;
end
MySQL изначально не поддерживает операции замены regex, только поиск.
Тем не менее, существуют пакеты, которые предоставляют некоторые функциональные возможности, такие как Oracle REGEXP_REPLACE() в качестве пользовательских функций.
Регулярное выражение [[:cntrl:]]+
соответствует одному или нескольким непечатаемым символам (ASCII 0-31 и ASCII 127).
Итак, используя вышеупомянутый пакет, REGEXP_REPLACE?(text, "[[:cntrl:]]+", "")
будет изменять text
лишив его всех непечатных символов.