un problema frecuente con la importación de datos en una base de datos es el espacio en blanco no deseado al principio o al final de las cadenas.
Los espacios en blanco iniciales y finales pueden causar problemas cuando intenta identificar registros duplicados, intenta unir tablas en columnas de cadenas o simplemente consulta un valor en particular.
afortunadamente, la función TRIM de SQL elimina ese molesto espacio en blanco inicial y final de las cadenas.
El espacio en blanco es un carácter en una cadena que representa el espacio horizontal o vertical en tipografía., En otras palabras: pestañas, feeds de línea, retornos de carro y, sí, espacios.
un espacio en blanco tiene valor de carácter, al igual que ‘a’, ‘B’ y ‘C’ tienen un valor. Simplemente no siempre podemos ver el espacio en blanco cuando se imprime.
y al igual que cualquier otro carácter, un espacio en blanco tiene un valor decimal en la tabla ASCII. Este pequeño hecho es muy útil cuando intenta identificar un carácter de espacio en blanco usando un comando SQL.,
The TRIM Function
Safari Books online has a nice snippet on the TRIM command:
ANSI SQL Standard Syntax
TRIM( FROM ]
target_string
)
The default for the first parameter, LEADING | TRAILING | BOTH
, is ‘BOTH’.
The default for is a space char(32)
.,
En otras palabras, si especifica solo el target_string
(el único parámetro requerido), se recortarán todos los espacios iniciales y finales.
ejemplo
Accept defaults to trim BOTH leading and trailing space characters:
SELECT ' Hello World ',
TRIM(' Hello World ');+-----------------+-------------------------+
| Hello World | TRIM(' Hello World ') |
+-----------------+-------------------------+
| Hello World | Hello World |
+-----------------+-------------------------+
Nota: La función TRIM para las versiones de SQL Server 2016 y anteriores no tiene argumentos que especifiquen los caracteres a recortar de una cadena. Solo recortan caracteres de espacio inicial/final.
ejemplo
elimine solo los caracteres de asterisco (*) iniciales., Tenga en cuenta que, aunque solo se especifique un ‘*’ como parámetro, TRIM elimina todos los asteriscos iniciales ( * ), independientemente de cuántos haya.
SELECT '*** Hello World **',
TRIM(LEADING '*' FROM '*** Hello World **');+--------------------+---------------------------------------------+
| *** Hello World ** | TRIM(LEADING '*' FROM '*** Hello World **') |
+--------------------+---------------------------------------------+
| *** Hello World ** | Hello World ** |
+--------------------+---------------------------------------------+
Un ejemplo de espacio en blanco escenario
Imagina que quieres convertir tu tienda de juguetes de inventario de los registros de las hojas de cálculo de un RDBMS la base de datos. Ha cargado correctamente una tabla de base de datos desde la hoja de cálculo.,
Puede verificar la carga comparando la hoja de cálculo original con la nueva tabla de la base de datos. Los resultados se ven muy bien.
Ahora quiere encontrar cuántos patos de juguete nunca se han recibido, así que consulta la base de datos:
SELECT toy_name, COUNT(*)
FROM toys
WHERE toy_name = 'duck'
GROUP BY toy_name;Empty set (0.00 sec)
Espera, ¿qué?! Eso no puede ser cierto, no se devuelven registros? Estás mirando directamente a la tabla de juguetes en la base de datos, puedes ver los 11 registros con toy_name = ‘duck’.,
Para ejecutar este pequeño y práctico instrucción SQL para hacer espacio en blanco visible:
Para más información sobre la función de REEMPLAZAR, haga clic aquí.
Ah ha! Ahora puedes ver que todos los toy_names tienen un espacio inicial, y algunos de ellos tienen otros caracteres de espacio en blanco final.,
ejecuta una serie de instrucciones de actualización utilizando la función TRIM para los espacios en blanco iniciales y finales: tabs char(9)
, Line-feeds char(10)
, carriage-returns char(13)
, y spaces char(32)
.,
ejecutar el SELECT de nuevo para hace que el espacio en blanco visible y, ufff, todos ellos se han ido:
Ahora usted puede contar su patos con confianza:
SELECT toy_name, COUNT(*)
FROM toys
WHERE toy_name = 'duck'
GROUP BY toy_name;