2012-07-18 143 views
2

我想從mysql的列中刪除所有或特定的非打印字符。 我認爲這可以實現使用regexp_replace()功能,但我怎麼不知道。 不可打印的字符的ASCII碼值從0到31. 我想過一種解決方案,如下所示: 如果我寫入從輸入字符串中逐個讀取所有字符並轉換爲ASCII的函數。然後每次我將這個Ascii值與輸入的ASCII值進行比較,如果匹配,則將其替換,我的函數將返回替換的字符串。 但在我的應用程序數據總是大量的,所以我認爲它會消耗很多時間來處理,即使我使用select查詢和我的用戶定義函數。 所以我想要另一種方式來執行這個任務。我認爲REGEXP_REPLACE()將是巨大的,但我不知道如何使用它從mysql的列中刪除所有或特定的非打印字符

請幫

謝謝你, Ronak

+0

可能重複的[如何在MySQL中執行正則表達式替換?](http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in- mysql) – DhruvPathak 2012-07-18 07:07:12

+0

可能重複的[如何檢測和替換表中的非打印字符?](http://stackoverflow.com/questions/11243541/how-to-detect-and-replace-non-printable-characters-from -table) – outis 2012-07-18 07:56:35

回答

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 
0

MySQL不支持正則表達式替換操作本身,只有搜索。

也就是說,有packages確實提供了一些功能,如Oracle的REGEXP_REPLACE()作爲用戶定義的函數。

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

因此,使用上述包,REGEXP_REPLACE?(text, "[[:cntrl:]]+", "")將通過去除所有非打印字符來修改text

+0

@RonakShah:如果這是最適合您的解決方案,您可能希望將其作爲答案發布。你也可以接受你自己的答案。你不能只讚揚你自己的帖子,只能讚揚其他人的帖子。 – 2012-07-18 13:50:30

相關問題