Eliminar espais, tabuladors i caràcters de final de línia d’un camp a MySQL

Si sabem que un camp d’una taula a MySQL no ha de tenir caràcters especials, els podem corregir sense usar cap script o codi en un altre llenguatge de programació. Si per exemple volem eliminar el caràcter de nova línia (newline en anglès, representat per \n) de qualsevol posició de la cadena ho podem fer així:

UPDATE taula SET camp = REPLACE(camp, '\n', '');

Si només volem eliminar-lo del final de la cadena:

UPDATE taula SET camp = TRIM(TRAILING '\t' FROM camp);

Si volem eliminar-lo només del principi, canviarem TRAILING per LEADING, i si el volem eliminar del principi i del final usarem BOTH.

El problema sorgeix quan volem eliminar varis caràcters especials alhora, com poden ser \n, \t (tabulador o TAB), \r (“retorn de carro”, carriage return o CR) o espais. Les funcions TRIM i REPLACE només accepten un caràcter o una cadena sencera, però no conjunts de caràcters. Per això, si volem eliminar \t i \n del final, no podem usar TRIM(TRAILING ‘\t\n’ FROM camp), sinó que haurem de cridar 3 vegades la funció TRIM:

UPDATE taula SET camp = TRIM(TRAILING '\t' FROM camp);
UPDATE taula SET camp = TRIM(TRAILING '\n' FROM camp);
UPDATE taula SET camp = TRIM(TRAILING '\t' FROM camp);

Contràriament al que podem pensar a priori, cal fer-ho 3 vegades per cobrir el cas en què la nostra cadena acabi amb ‘\t\n’. Si obviem l’última crida, en aquest cas no eliminaríem el \t.

També es pot fer amb una única assignació:

UPDATE taula SET camp = TRIM(TRAILING '\t' FROM
                            TRIM(TRAILING '\n' FROM
                                TRIM(TRAILING '\t' FROM camp)
                            )
                        );

Ràpidament ens adonem que si en lloc de dos elements en tenim més, el nombre de combinacions creix exponencialment. En aquests casos segurament sigui millor crear un script per facilitar la feina. Per exemple a PHP sí que existeix la funció str_replace() que accepta conjunts de caràcters per substituir, i trim() que substitueix ensems espais, \t, \n, \r, \0 (caràcter nul)  i \x0B (tabulador vertical).

Per acabar, esmentar que també es pot usar la combinació simultània de substituir un caràcter i eliminar-ne un altre dels extrems:

UPDATE taula SET camp = TRIM(BOTH '\r\n' FROM REPLACE(camp, '\t', ''));
GD Star Rating
loading...