web-dev-qa-db-fra.com

La fonction MySQL TRIM ne limite-t-elle pas les sauts de ligne ou les retours à la ligne?

D'après mes expériences, il ne semble pas en être ainsi. Si cela est vrai, quelle est la meilleure méthode pour supprimer les sauts de ligne? Je teste actuellement les paramètres que TRIM accepte du caractère à supprimer, en commençant par rogner \n et \r.

25
Thomas Owens

Trim() dans MySQL supprime uniquement les espaces.

Je ne crois pas qu'il existe un moyen intégré pour supprimer toutes sortes d'espaces de début et de fin dans MySQL, à moins d'utiliser de manière répétée Trim().

Je vous suggère d'utiliser une autre langue pour nettoyer vos données actuelles et vous assurer simplement que vos entrées sont désinfectées à partir de maintenant.

7
Peter Crabtree

Mes sauts de ligne étaient au milieu de la chaîne et je n'avais aucun contrôle sur les données source. La commande mysql suivante a fonctionné pour moi:

REPLACE(FIELD,'\r\n',' ')
46
David Hitchen

Oui, Trim() fonctionnera dans MySQL. Vous avez deux choix.

1) sélectionnez-le: 

select trim(BOTH '\n' from [field_name]) as field

Si cela ne fonctionne pas, essayez '\r', si cela ne fonctionne pas, essayez '\n\r'.

2) remplacez les mauvaises données de votre tableau par une mise à jour ...

update [table_name] set [field_name] = trim(BOTH '\n' from [field_name])

Je recommande d’abord une sélection pour déterminer votre saut de ligne (\ r ou\n).

17
Lucas

La fonction MySQL trim standard ne ressemble pas aux fonctions de trim dans les autres langues que je connais, car elle supprime uniquement les correspondances exactes, plutôt que les caractères de la chaîne. Cette fonction stockée ressemble plus à un trim normal que vous trouveriez en PHP, ou un strip en python, etc.

CREATE FUNCTION `multiTrim`(string varchar(1023),remove varchar(63)) RETURNS varchar(1023) CHARSET utf8
BEGIN
  -- Remove trailing chars
  WHILE length(string)>0 and remove LIKE concat('%',substring(string,-1),'%') DO
    set string = substring(string,1,length(string)-1);
  END WHILE;

  -- Remove leading chars
  WHILE length(string)>0 and remove LIKE concat('%',left(string,1),'%') DO
    set string = substring(string,2);
  END WHILE;

  RETURN string;
END;

Vous devriez alors pouvoir faire:

select multiTrim(string,"\r\n\t ");

et il devrait supprimer toutes les nouvelles lignes, les onglets et les espaces.

9
rjmunro

select trim(both '\r\n' from FIELDNAME) from TABLE; devrait fonctionner si select trim(both '\n' from FIELDNAME) from TABLE; ne fonctionnait pas.

5
select trim(both '\n' from FIELDNAME) from TABLE;
3
LeppyR64

je ne pouvais le faire fonctionner qu'en faisant char;

trim(both char(13) from fieldname)
3
neil fletcher

J'ai rencontré le même problème avec l'un des champs. Il n'y a pas de solution parfaite. Dans mon cas, j’ai eu de la chance que la longueur du champ soit supposée être de 6. Donc j’ai utilisé une requête comme

update events set eventuniqueid = substring(eventuniqueid, 1, 6) where length(eventuniqueid) = 7;

Il vous suffira de choisir la meilleure option en fonction de vos besoins. Le remplacement '\ n' et '\ r\n' ne fonctionnait pas pour moi et finissait par me faire perdre mon temps. 

0
Punit Raizada

Les réponses ci-dessus, une fois combinées, fonctionnent. Voici un exemple complet de remplacement des sauts de ligne au début et à la fin du champ:

UPDATE table SET field=REPLACE(field, field, TRIM(BOTH '\r\n' FROM field))
0
Ilya