从mysql中的列中删除ALL或特定的非可打印字符

时间:2012-07-18 06:19:10

标签: mysql regex ascii non-printable

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

请帮忙

谢谢你, Ronak

2 个答案:

答案 0 :(得分:3)

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 

答案 1 :(得分:1)

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

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

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

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