Удалить ВСЕ или определенный непечатаемый символ из столбца в 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 лишив его всех непечатных символов.

Другие вопросы по тегам