it-swarm.com.de

Trimmt die MySQL TRIM-Funktion keine Zeilenumbrüche oder Zeilenumbrüche?

Nach meinen Experimenten scheint es nicht so zu sein. Wenn dies tatsächlich zutrifft, welche Methode eignet sich am besten zum Entfernen von Zeilenumbrüchen? Ich experimentiere derzeit mit den Parametern, die TRIM für das zu entfernende Zeichen akzeptiert, beginnend mit dem Zuschneiden von \n und \r.

25
Thomas Owens

Trim() in MySQL entfernt nur Leerzeichen.

Ich glaube nicht, dass es eine integrierte Methode gibt, um alle Arten von nachlaufenden und führenden Leerzeichen in MySQL zu entfernen, es sei denn, Sie verwenden Trim() wiederholt.

Ich schlage vor, Sie verwenden eine andere Sprache, um Ihre aktuellen Daten zu bereinigen, und stellen Sie einfach sicher, dass Ihre Eingaben von nun an bereinigt werden.

7
Peter Crabtree

Meine Zeilenumbrüche waren in der Mitte der Zeichenfolge, und ich hatte keine Kontrolle über die Quelldaten. Der folgende MySQL-Befehl hat für mich funktioniert:

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

Ja, Trim() wird in MySQL funktionieren. Sie haben zwei Möglichkeiten.

1) wähle es aus: 

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

Wenn dies nicht funktioniert, versuchen Sie '\r'. Wenn dies nicht funktioniert, versuchen Sie '\n\r'.

2) Ersetzen Sie die fehlerhaften Daten in Ihrer Tabelle durch ein Update ...

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

Ich empfehle eine Auswahl, um zu bestimmen, welchen Zeilenumbruch Sie haben (\ r oder\n).

17
Lucas

Die standardmäßige MySQL-Funktion trim ist nicht mit den Trimmfunktionen in anderen mir bekannten Sprachen vergleichbar, da sie nur exakte Zeichenfolgenübereinstimmungen entfernt und keine Zeichen in der Zeichenfolge. Diese gespeicherte Funktion ähnelt eher einem normalen Trimm, den Sie in PHP finden würden, oder in Python usw.

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;

Sie sollten dann in der Lage sein:

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

und es sollte alle Zeilenumbrüche, Tabulatoren und Leerzeichen entfernen.

9
rjmunro

select trim(both '\r\n' from FIELDNAME) from TABLE; sollte funktionieren, wenn select trim(both '\n' from FIELDNAME) from TABLE; nicht funktioniert.

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

ich konnte es nur zur Arbeit bringen, indem ich char mache;

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

Mit einem der Felder hatte ich dasselbe Problem. Es gibt keine perfekte Lösung. In meinem Fall hatte ich Glück, dass die Länge des Feldes 6 sein sollte. Also habe ich eine Abfrage wie verwendet

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

Sie müssen nur die beste Option für Ihren Bedarf auswählen. Das Ersetzen '\ n' und '\ r\n' funktionierte nicht für mich und verschwendete nur meine Zeit. 

0
Punit Raizada

Die obigen Antworten funktionieren, wenn sie kombiniert werden. Ein vollständiges Beispiel für das Ersetzen von Zeilenumbrüchen am Anfang und Ende des Feldes sieht folgendermaßen aus:

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