从MySQL列中删除所有或特定的非可打印字符

3
我想从MySQL中的列中删除所有或特定的不可打印字符。我认为可以使用 regexp_replace() 函数来实现,但我不知道如何操作。
非可打印字符的ASCII值范围是0到31。
我想到了一种解决方案,即编写一个函数逐个读取输入字符串中的所有字符并将其转换为ASCII码。然后每次将此ASCII值与输入的ASCII值进行比较,如果匹配,则替换它,并且我的函数将返回替换后的字符串。
但在我的应用程序中,数据总是以批量形式存在,因此我认为即使使用select查询和自定义函数,处理时间也会太长。
所以我想找到另一种执行此任务的方式。 我认为 regexp_replace() 很棒,但我不知道该如何使用。
请帮忙,谢谢。
Ronak

可能是如何在MySQL中进行正则表达式替换?的重复问题。 - undefined
可能是如何检测和替换表中的非打印字符?的重复问题。 - undefined
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 

2
MySQL不支持正则表达式替换操作,只支持搜索。
话虽如此,有一些 提供了像Oracle的REGEXP_REPLACE()函数一样的功能作为用户定义的函数。
正则表达式[[:cntrl:]]+匹配一个或多个不可打印字符(ASCII 0-31和ASCII 127)。
因此,使用上述的包,REGEXP_REPLACE?(text, "[[:cntrl:]]+", "") 将通过剥离所有不可打印字符来修改text

@RonakShah:如果那个解决方案对你来说是最好的,请将其作为答案发布。你也可以接受自己的答案。但你不能给自己的帖子点赞,只能给别人的帖子点赞。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接