none
Quitar espacios en blancos en un campo SQL SERVER RRS feed

  • Pregunta

  • Buenos dias expertos:

    Tengo la siguiente consulta en SQL Server

    SELECT LTRIM(RTRIM(cDescripcionArea)) AS cDescripcionArea
    FROM empleadoArea
    

    Pero no suprime los campos en blancos(o tabulacion) que tiene al inicio.

    También intenté con el siguiente código, pero no elimina los espacios en blanco o tabulacion.

    update [dbo].[empleadoArea] set  
         cDescripcionArea=replace(cDescripcionArea,' ', '')

    Alguien ha solucionado este problema?

    Saludos.


    viernes, 21 de abril de 2017 15:17

Respuestas

  • Hola,

    LTRIM y RTRIM no siempre eliminan todos los espacios en blanco,n o podemos controlar siempre cómo se introducen los datos. Los datos podrían venir de otro sistema, una conversión de datos, una aplicación de edad, EDI, Excel, o desde una aplicación que tenía el control de mala calidad. En algunos de esos casos, un espacio en blanco no puede ser introducida o guardada en el sistema como el carácter 32 que es un espacio en blanco entrado en un teclado.

    Para solucionarlo puedes usar la siguiente función:

    CREATE FUNCTION [dbo].[udfTrim] 
    (
    	@StringToClean as varchar(8000)
    )
    RETURNS varchar(8000)
    AS
    BEGIN	
    	--Replace all non printing whitespace characers with Characer 32 whitespace
    	--NULL
    	Set @StringToClean = Replace(@StringToClean,CHAR(0),CHAR(32));
    	--Horizontal Tab
    	Set @StringToClean = Replace(@StringToClean,CHAR(9),CHAR(32));
    	--Line Feed
    	Set @StringToClean = Replace(@StringToClean,CHAR(10),CHAR(32));
    	--Vertical Tab
    	Set @StringToClean = Replace(@StringToClean,CHAR(11),CHAR(32));
    	--Form Feed
    	Set @StringToClean = Replace(@StringToClean,CHAR(12),CHAR(32));
    	--Carriage Return
    	Set @StringToClean = Replace(@StringToClean,CHAR(13),CHAR(32));
    	--Column Break
    	Set @StringToClean = Replace(@StringToClean,CHAR(14),CHAR(32));
    	--Non-breaking space
    	Set @StringToClean = Replace(@StringToClean,CHAR(160),CHAR(32));
     
    	Set @StringToClean = LTRIM(RTRIM(@StringToClean));
    	Return @StringToClean
    END
    GO

    Espero sea de tu ayuda.

    • Propuesto como respuesta Luis Rojas Vásquez viernes, 21 de abril de 2017 15:32
    • Marcado como respuesta ruyzz viernes, 21 de abril de 2017 15:33
    viernes, 21 de abril de 2017 15:26

Todas las respuestas

  • Hola, ¿Qué tipo de dato es el campo?
    viernes, 21 de abril de 2017 15:20
  • Hola el tipo de dato es el siguiente

    varchar(80)

    Saludos.

    viernes, 21 de abril de 2017 15:21
  • ruyzz,

    SELECT LTRIM(RTRIM(REPLACE(cDescripcionArea, char(9), ''))) ...


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 21 de abril de 2017 15:24
  • Hola,

    LTRIM y RTRIM no siempre eliminan todos los espacios en blanco,n o podemos controlar siempre cómo se introducen los datos. Los datos podrían venir de otro sistema, una conversión de datos, una aplicación de edad, EDI, Excel, o desde una aplicación que tenía el control de mala calidad. En algunos de esos casos, un espacio en blanco no puede ser introducida o guardada en el sistema como el carácter 32 que es un espacio en blanco entrado en un teclado.

    Para solucionarlo puedes usar la siguiente función:

    CREATE FUNCTION [dbo].[udfTrim] 
    (
    	@StringToClean as varchar(8000)
    )
    RETURNS varchar(8000)
    AS
    BEGIN	
    	--Replace all non printing whitespace characers with Characer 32 whitespace
    	--NULL
    	Set @StringToClean = Replace(@StringToClean,CHAR(0),CHAR(32));
    	--Horizontal Tab
    	Set @StringToClean = Replace(@StringToClean,CHAR(9),CHAR(32));
    	--Line Feed
    	Set @StringToClean = Replace(@StringToClean,CHAR(10),CHAR(32));
    	--Vertical Tab
    	Set @StringToClean = Replace(@StringToClean,CHAR(11),CHAR(32));
    	--Form Feed
    	Set @StringToClean = Replace(@StringToClean,CHAR(12),CHAR(32));
    	--Carriage Return
    	Set @StringToClean = Replace(@StringToClean,CHAR(13),CHAR(32));
    	--Column Break
    	Set @StringToClean = Replace(@StringToClean,CHAR(14),CHAR(32));
    	--Non-breaking space
    	Set @StringToClean = Replace(@StringToClean,CHAR(160),CHAR(32));
     
    	Set @StringToClean = LTRIM(RTRIM(@StringToClean));
    	Return @StringToClean
    END
    GO

    Espero sea de tu ayuda.

    • Propuesto como respuesta Luis Rojas Vásquez viernes, 21 de abril de 2017 15:32
    • Marcado como respuesta ruyzz viernes, 21 de abril de 2017 15:33
    viernes, 21 de abril de 2017 15:26
  • Gracias por responder ajunto imagen donde no realiza el cambio.

    Saluos.

    • Propuesto como respuesta CastanedaVE martes, 23 de enero de 2018 15:40
    viernes, 21 de abril de 2017 15:28
  • Excelente solución, además de la explicación.

    Saludos.

    viernes, 21 de abril de 2017 15:33
  • Que tal..... Muuuuuuyyyy bueeeeena y util...

    Hoy me mate acomodando a mano campitos de un excel... porque no me funcionaba el LTRIM, RTRIM.. ect.

    Muchas gracias....

    viernes, 15 de septiembre de 2017 15:58
  • Fue de mucha ayuda muchas gracias

    jueves, 18 de enero de 2018 1:02
  • Que versión de SQL tienes?, en el 2017 si me sirvió esa que tienes
    viernes, 9 de noviembre de 2018 15:37