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 inicio 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 encontrar / reemplazar el espacio en blanco en el campo2?
Respuestas:
Estás buscando TRIM .
fuente
Una respuesta general que compuse de sus respuestas y de otros enlaces y funcionó para mí y la escribí en un comentario es:
etc.
Debido a que trim () no elimina todos los espacios en blanco, es mejor reemplazar todos los espacios en blanco que desee y luego recortarlo.
Espero poder ayudarte a compartir mi respuesta :)
fuente
Comprenda el caso de uso antes de usar esta solución:
trim no funciona mientras se realiza la consulta de selección
Esto funciona
Si bien esto no
fuente
TRIM()
funciona bien para mí en unaSELECT
declaración, tengo mucha curiosidad sobre por qué esta respuesta tiene tantos votos positivos. ¿Estás usando mysql? Que versiónSELECT CONCAT('"', TRIM(" hello world "), '"') AS `trimmed value` FROM DUAL
da la salida deseada"hello world"
. Mientras que la variante de reemplazo elimina peligrosamente el espacio como separador de palabras:SELECT CONCAT('"', REPLACE(" hello world ", ' ', '')) AS `replaced value` FROM DUAL
da la salida no deseada"helloworld"
Para ser claros, TRIM por defecto solo elimina espacios (no todos los espacios en blanco). Aquí está el documento: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim
fuente
Parece que ninguna de las respuestas actuales en realidad eliminará el 100% del espacio en blanco desde el inicio y el final de una cadena.
Como se mencionó en otras publicaciones, el valor predeterminado
TRIM
solo elimina espacios, no pestañas, avances de formulario, etc. Una combinación deTRIM
s que especifique otros caracteres de espacio en blanco puede proporcionar una mejora limitada, por ejemploTRIM(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 único carácter para un particularTRIM
y esos caracteres solo se eliminan desde el principio y el final. Entonces, si la cadena que se está recortando es algo así\t \t \t \t
(es decir, espacios alternativos y caracteres de tabulación),TRIM
se necesitarían más s, y en el caso general esto podría continuar indefinidamente.Para una solución ligera, debería ser posible escribir una función definida por el usuario (UDF) simple para hacer el trabajo recorriendo los caracteres al principio y al final de una cadena. Pero no voy a hacer eso ... ya que 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 de blog .
Manifestación
Demo en línea de Rextester . En particular, la última fila muestra los otros métodos que fallan pero el método de expresión regular tiene éxito.
Función :
Uso:
fuente
Esta declaración eliminará y actualizará el contenido de campo de su base de datos
Para eliminar espacios en blanco en el lado izquierdo del valor del campo
ACTUALIZAR tabla SET field1 = LTRIM (field1);
ex. ACTUALIZAR miembro SET firstName = LTRIM (firstName);
Para eliminar espacios en blanco en el lado derecho del valor del campo
ACTUALIZAR tabla SETfield1 = RTRIM (campo1);
ex. ACTUALIZAR miembro SET firstName = RTRIM (firstName);
fuente
Necesitaba recortar los valores en una columna de clave principal que tenía nombre y 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 tenía que mantener. Lo que funcionó para mí fue ...
o
o
Tenga en cuenta que la primera instancia de FIELD está entre comillas simples, pero la segunda no está entre comillas. Tuve que hacerlo de esta manera o me dio un error de sintaxis que decía que era una clave primaria duplicada cuando tenía ambas entre comillas.
fuente
Si necesita usar recortar en la consulta de selección, también puede usar expresiones regulares
devolver filas con un campo como 'query-string'
fuente
puede usar ltrim o rtrim para limpiar espacios en blanco a la derecha o izquierda o una cadena.
fuente
Puede usar el siguiente sql, UPDATE
TABLE
SETColumn
= replace (Column, '', '')fuente
Sé que ya está aceptado, pero para aquellos como yo que buscan "eliminar TODOS los espacios en blanco" (no solo al principio y al final de la cadena):
EDITAR 2019/6/20: Sí, eso no es bueno. La función devuelve la parte de la cadena desde "cuando se produjo el espacio de caracteres por primera vez". Entonces, supongo que decir esto elimina los espacios en blanco iniciales y finales y devuelve la primera palabra:
fuente