2012-07-18 5 views
2

mysql의 내 열에서 인쇄 할 수없는 모든 문자를 제거하고 싶습니다. 이게 regexp_replace() 함수를 사용하여 달성 할 수 있다고 생각하지만 어떻게 알지는 못합니다. 인쇄 할 수없는 문자는 o에서 31까지의 Ascii 값을가집니다. 다음과 같은 해결책을 생각해보십시오 : 입력 문자열의 모든 문자를 하나씩 읽고 ASCII로 변환하는 함수를 작성합니다. 그런 다음 매번이 Ascii 값을 입력 ascii 값과 비교하고 일치하면 대체하고 함수는 대체 문자열을 반환합니다. 그러나 내 응용 프로그램 데이터에서는 항상 대량으로 처리되므로 선택 쿼리와 사용자 정의 함수를 사용하더라도 많은 시간이 소요될 것이라고 생각합니다. 그래서이 작업을 수행하는 다른 방법이 필요합니다. 나는 REGEXP_REPLACE()가이 좋을 것이라고 생각하지만 난 정규식은 기본적으로 만 검색 작업을 대체 지원하지 않습니다 Ronakmysql의 열에서 ALL 또는 특정 인쇄 할 수없는 문자 제거

+0

가능한 복제본 [MySQL에서 정규 표현식을 바꾸는 방법?] (http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in- mysql) – DhruvPathak

+0

가능한 [테이블에서 인쇄 할 수없는 문자를 검색하고 바꿀 수있는 방법?] (http://stackoverflow.com/questions/11243541/how-to-detect-and-replace-non-printable-characters-from) -table) – outis

답변

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의 감사가

도와주세요 사용 방법 잘 모릅니다.

즉, 사용자 정의 함수로 Oracle의 REGEXP_REPLACE()와 같은 일부 기능을 제공하는 packages이 있습니다.

일반 표현식 [[:cntrl:]]+은 하나 이상의 인쇄 할 수없는 문자 (ASCII 0-31 및 ASCII 127)와 일치합니다.

위의 패키지를 사용하면 REGEXP_REPLACE?(text, "[[:cntrl:]]+", "")은 인쇄 할 수없는 모든 문자를 제거하여 text을 수정합니다.

+0

@RonakShah : 가장 적합한 솔루션 인 경우 답변으로 게시하고 싶을 수 있습니다. 당신은 당신 자신의 대답도 받아 들일 수 있습니다. 당신은 단지 자신의 게시물을 upvote 수 없습니다, 다른 사람들의 upvote. –

관련 문제