2012-07-18 1 views
2

Je veux supprimer tout OU caractère particulier non imprimable de ma colonne dans mysql. Je pense que cela peut être réalisé en utilisant regexp_replace() fonction mais comment je ne sais pas. Les caractères non imprimables ont une valeur Ascii de 0 à 31. J'avais une solution Think qui est comme ci-dessous: SI j'écris la fonction qui lit tous les caractères de la chaîne d'entrée un par un et convertit en ASCII. Ensuite, chaque fois que je compare cette valeur Ascii avec la valeur d'entrée ASCII et si elle correspond, puis le remplacer et ma fonction va retourner la chaîne remplacée. Mais dans mon application, les données sont toujours en vrac, donc je pense que cela prendra beaucoup de temps pour le traitement, même si j'utilise une requête select et ma fonction définie par l'utilisateur. Donc, je veux une autre façon d'effectuer cette tâche. Je pense que regexp_replace() sera grande mais je ne sais pas comment l'utiliserSupprimer tout ou un caractère non imprimable de la colonne dans mysql

S'il vous plaît aider

Merci, Ronak

+0

duplication possible de [Comment faire pour remplacer une expression régulière dans MySQL?] (Http://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in- mysql) – DhruvPathak

+0

duplication possible de [Comment détecter et remplacer les caractères non imprimables de la table?] (http://stackoverflow.com/questions/11243541/how-to-detect-and-replace-non-printable-characters-from -table) – outis

Répondre

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 ne supporte pas regex remplacer les opérations en mode natif, seules les recherches. Cela dit, il y a packages qui fournit certaines fonctionnalités comme REGEXP_REPLACE() d'Oracle en tant que fonctions définies par l'utilisateur.

L'expression régulière [[:cntrl:]]+ correspond à un ou plusieurs caractères non imprimables (ASCII 0-31 et ASCII 127). Par conséquent, en utilisant le package susmentionné, REGEXP_REPLACE?(text, "[[:cntrl:]]+", "") modifiera text en supprimant tous les caractères non imprimables.

+0

@RonakShah: Vous pouvez publier cette réponse comme réponse si c'est la solution qui vous convient le mieux. Vous pouvez aussi accepter votre propre réponse. Vous ne pouvez pas convertir vos propres messages, seulement ceux des autres. –

Questions connexes