reemplazar quitar intermedios espacios blanco mysql field removing-whitespace

quitar - ¿Cómo eliminar los espacios en blanco iniciales y finales en un campo MySQL?



reemplazar espacios en blanco mysql (10)

Tengo una tabla con dos campos (países y códigos ISO):

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

En algunas filas, el segundo campo tiene espacios en blanco al comienzo y / o al final, lo que afecta las consultas.

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

¿Hay alguna manera (en SQL) de recorrer la tabla y buscar / reemplazar los espacios en blanco en el campo2?



Esta declaración eliminará y actualizará el contenido del campo de su base de datos

Para eliminar espacios en blanco en el lado izquierdo del valor del campo

Tabla de ACTUALIZACIÓN SET field1 = LTRIM (campo1);

ex. UPDATE miembro SET firstName = LTRIM (firstName);

Para eliminar espacios en blanco en el lado derecho del valor del campo

Tabla de ACTUALIZACIÓN SETfield1 = RTRIM (campo1);

ex. UPDATE miembro SET firstName = RTRIM (firstName);


Necesitaba recortar los valores en una columna de clave principal que tenía el nombre y el apellido, por lo que no quería recortar todo el espacio en blanco ya que eso eliminaría el espacio entre el nombre y el apellido, que debía mantener. Lo que funcionó para mí fue ...

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

o

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

o

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

Tenga en cuenta que la primera instancia de FIELD está entre comillas simples, pero la segunda no está entre comillas. Tenía que hacerlo de esta manera o me dio un error de sintaxis diciendo que era una clave primaria duplicada cuando tenía ambas entre comillas.



Parece que ninguna de las respuestas actuales eliminará el 100% del espacio en blanco desde el inicio y el final de una cadena.

Como se mencionó en otras publicaciones, el dev.mysql.com/doc/refman/5.0/en/… predeterminado solo elimina espacios, no pestañas, fuentes, etc. Una combinación de TRIM especifica otros caracteres en espacios en blanco puede proporcionar una mejora limitada, por ejemplo, TRIM(BOTH ''/r'' FROM TRIM(BOTH ''/n'' FROM TRIM(BOTH ''/f'' FROM TRIM(BOTH ''/t'' FROM TRIM(txt))))) . Pero el problema con este enfoque es que solo se puede especificar un solo carácter para un TRIM particular y esos caracteres solo se eliminan desde el principio y el final. Entonces, si la cadena que se está recortando es algo así como /t /t /t /t (es decir, espacios alternados y caracteres de pestañas), se necesitarían más TRIM - y en el caso general esto podría continuar indefinidamente.

Para una solución liviana, debería ser posible escribir una función definida por el usuario (UDF) simple para hacer el trabajo al recorrer los caracteres al principio y al final de una cadena. Pero no voy a hacer eso ... ya que ya he escrito un sustituto de expresiones regulares bastante más pesado que también puede hacer el trabajo, y puede ser útil por otras razones, como se describe en esta publicación del blog .

Manifestación

Demostración en línea de Rextester . En particular, la última fila muestra los otros métodos fallando, pero el método de expresión regular fue exitoso.

SQL (código de función omitido por brevedad)

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


Por favor, comprenda el caso de uso antes de usar esta solución:

recortar no funciona al hacer una consulta de selección

Esto funciona

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

Si bien esto no

select trim(name) from test;


Sé que ya es aceptado, pero para aquellos como yo que buscamos "eliminar TODOS los espacios en blanco" (no solo al principio y al final de la cadena):

seleccione SUBSTRING_INDEX (''1234 243'', '''', 1);

devuelve ''1234''


Si necesita usar el ajuste en la consulta de selección, también puede usar expresiones regulares

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

devolver filas con un campo como ''query-string''


Una respuesta general que compuse a partir de sus respuestas y de otros enlaces y funcionó para mí y la escribí en un comentario es:

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

etc.

Porque trim () no elimina todos los espacios en blanco por lo que es mejor reemplazar todos los espacios en blanco que desee y luego recortarlo.

Espero poder ayudarte a compartir mi respuesta :)


puede usar ltrim o rtrim para limpiar espacios en blanco para la derecha o la izquierda o una cadena.