wake-up-neo.com

Wie entferne ich führende und nachfolgende Leerzeichen in einem MySQL-Feld?

Ich habe eine Tabelle mit zwei Feldern (Länder und ISO-Codes):

Table1

   field1 - e.g. 'Afghanistan' (without quotes)
   field2 - e.g. 'AF'(without quotes)

In einigen Zeilen enthält das zweite Feld am Anfang und/oder Ende Leerzeichen, was sich auf Abfragen auswirkt.

Table1

   field1 - e.g. 'Afghanistan' (without quotes) 
   field2 - e.g. ' AF' (without quotes but with that space in front)

Gibt es eine Möglichkeit (in SQL), die Tabelle zu durchsuchen und das Leerzeichen in field2 zu finden/zu ersetzen?

119
KB.

Sie suchen nach TRIM .

UPDATE FOO set FIELD2 = TRIM(FIELD2);
247
cwallenpoole

Eine allgemeine Antwort, die ich aus Ihren Antworten und aus anderen Links zusammengestellt habe und die für mich funktioniert hat und die ich in einem Kommentar geschrieben habe, lautet:

 UPDATE FOO set FIELD2 = TRIM(Replace(Replace(Replace(FIELD2,'\t',''),'\n',''),'\r',''));

usw.

Da trim () nicht alle Leerzeichen entfernt, ist es besser, alle gewünschten Leerzeichen zu ersetzen und sie dann zu kürzen.

Hoffe, ich konnte dir helfen, meine Antwort zu teilen :)

34
Chris Sim

Bitte verstehen Sie den Anwendungsfall, bevor Sie diese Lösung verwenden:

der Zuschnitt funktioniert bei der Auswahlabfrage nicht

Das funktioniert

select replace(name , ' ','') from test;

Während dies nicht der Fall ist

select trim(name) from test;
25
amitchhajer

Um klar zu sein, entfernt TRIM standardmäßig nur Leerzeichen (nicht alle Leerzeichen). Hier ist das Dokument: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim

16
mulya

Es scheint, dass keine der aktuellen Antworten tatsächlich 100% des Leerzeichens vom Anfang und Ende einer Zeichenfolge entfernt.

Wie in anderen Beiträgen erwähnt, werden mit der Standardeinstellung TRIM nur Leerzeichen entfernt - keine Tabulatoren, Formularvorschübe usw. Eine Kombination von TRIMs, die andere Leerzeichen angibt, kann eine begrenzte Verbesserung bewirken, z. TRIM(BOTH '\r' FROM TRIM(BOTH '\n' FROM TRIM(BOTH '\f' FROM TRIM(BOTH '\t' FROM TRIM(txt))))). Das Problem bei diesem Ansatz ist jedoch, dass für ein bestimmtes TRIM nur ein einzelnes Zeichen angegeben werden kann und diese Zeichen nur am Anfang und am Ende entfernt werden. Also, wenn die Zeichenfolge getrimmt wird, ist so etwas wie \t \t \t \t (d. h. alternative Leerzeichen und Tabulatorzeichen), mehr TRIMs wären erforderlich - und im allgemeinen Fall könnte dies unbegrenzt weitergehen.

Für eine einfache Lösung sollte es möglich sein, eine einfache benutzerdefinierte Funktion (User Defined Function, UDF) zu schreiben, um die Aufgabe zu erledigen, indem die Zeichen am Anfang und Ende einer Zeichenfolge durchlaufen werden. Aber ich werde das nicht tun ... da ich bereits ein eher schwergewichtiges regulärer Ausdruck-Ersetzer geschrieben habe, das auch den Job erledigen kann - und aus anderen Gründen nützlich sein kann, wie beschrieben in dieser Blog-Beitrag .

Demo

Rextester Online-Demo . Insbesondere zeigt die letzte Zeile die anderen Methoden, die fehlschlagen, aber die reguläre Ausdrucksmethode ist erfolgreich.

SQL (Funktionscode der Kürze halber weggelassen)

SELECT reg_replace(
         reg_replace(txt,
                     '^[[:space:]]+',
                     '',
                     TRUE,
                     1,
                     0),
         '[[:space:]]+$',
         '',
         TRUE,
         1,
         0) AS `trimmed txt`
FROM tbl;
9
Steve Chambers

Diese Anweisung entfernt und aktualisiert den Feldinhalt Ihrer Datenbank

Leerzeichen auf der linken Seite des Feldwerts entfernen

PDATE-Tabelle SET field1 = LTRIM (field1);

ex. UPDATE-Member SET firstName = LTRIM (firstName);

Leerzeichen auf der rechten Seite des Feldwerts entfernen

PDATE-Tabelle SETfield1 = RTRIM (field1);

ex. UPDATE-Member SET firstName = RTRIM (firstName);

3
luxknight_007

Ich musste die Werte in einer Primärschlüsselspalte abschneiden, die Vor- und Nachnamen enthielt. Daher wollte ich nicht den gesamten Leerraum abschneiden, da dadurch das Leerzeichen zwischen Vor- und Nachnamen entfernt wurde, das ich beibehalten musste. Was bei mir funktioniert hat war ...

UPDATE `TABLE` SET `FIELD`= TRIM(FIELD);

oder

UPDATE 'TABLE' SET 'FIELD' = RTRIM(FIELD);

oder

UPDATE 'TABLE' SET 'FIELD' = LTRIM(FIELD);

Beachten Sie, dass die erste Instanz von FIELD in einfachen Anführungszeichen steht, die zweite jedoch überhaupt nicht. Ich musste es auf diese Weise tun oder es gab mir einen Syntaxfehler, der besagte, dass es ein doppelter Primärschlüssel war, als ich beide in Anführungszeichen hatte.

1
MistyDawn

Wenn Sie in ausgewählten Abfragen Trimmen verwenden müssen, können Sie auch reguläre Ausdrücke verwenden

SELECT * FROM table_name WHERE field RLIKE ' * query-string *'

rückgabe von Zeilen mit Feld wie 'Abfragezeichenfolge'

1
TheSameSon

sie können ltrim oder rtrim verwenden, um Leerzeichen für die rechte oder linke Seite oder eine Zeichenfolge zu löschen.

0
Tomer