2

我想从我的 mysql 列中删除所有 OR 特定的不可打印字符。我认为这可以使用regexp_replace() 函数来实现,但我不知道。不可打印字符的 Ascii 值从 o 到 31。我有一种解决方案,如下所示:如果我编写一个从输入字符串中读取所有字符并转换为 ASCII 的函数。然后每次我将此 Ascii 值与输入的 ascii 值进行比较,如果匹配则替换它,我的函数将返回替换字符串。但是在我的应用程序中,数据总是批量的,所以我认为即使我使用选择查询和我的用户定义函数,它也会消耗很多时间来处理。所以我想要替代方法来执行这项任务。我认为regexp_replace()会很棒,但我不知道如何使用它

请帮忙

谢谢你,罗纳克

4

2 回答 2

4
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 
于 2012-07-20T08:01:24.473 回答
2

MySQL 本身不支持正则表达式替换操作,仅支持搜索。

也就是说,有些确实提供了一些功能,例如 Oracle 的 REGEXP_REPLACE() 作为用户定义的函数。

正则表达式[[:cntrl:]]+匹配一个或多个不可打印字符(ASCII 0-31 和 ASCII 127)。

因此,使用上述包,REGEXP_REPLACE?(text, "[[:cntrl:]]+", "")将通过删除text所有不可打印字符来进行修改。

于 2012-07-18T07:16:16.220 回答