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