2009-12-08 27 views
9

Estoy usando el servidor SQL MSDE 2000. Tengo un campo llamado notes de tipo nvarchar (65).Eliminar el espacio vacío final en un campo contenido

El contenido es 'Algo' con un espacio extra después del contenido (citas para mayor claridad) en todos los registros. Usé el siguiente comando.

UPDATE TABLE1 
    SET notes = RTRIM(LTRIM(notes)) 

Pero no funciona. ¿Hay alguna forma alternativa de hacerlo?

+2

¿qué es lo que quiere decir con "no funciona"? Debería .... –

+0

No estoy seguro. La consulta se ejecuta correctamente y aparece el mensaje '(12539 fila (s) afectadas)'. Pero el campo todavía tiene el valor con un espacio final. – bdhar

+0

estás mirando la instancia de servidor correcta, tabla ?? Lo hice antes ... –

Respuesta

10

¿Estás seguro de que la consulta no está funcionando? Proveedores:

SELECT TOP 100 '~'+ t.notes +'~' 
    FROM TABLE1 t 

TOP 100 limitará los resultados a las primeras 100 filas, lo suficiente como para tener una idea de si hay realmente un espacio en la salida. Si lo hay, y RTRIM/LTRIM no lo está eliminando, entonces no se trata de un personaje de espacio en blanco. En ese caso, intente:

UPDATE TABLE1 
    SET notes = REPLACE(notes, 
         SUBSTRING(notes, PATINDEX('%[^a-zA-Z0-9 '''''']%', notes), 1), 
         '') 
WHERE PATINDEX('%[^a-zA-Z0-9 '''''']%', notes) <> 0 
+0

Este funciona. ¿Cuál es la diferencia entre esto y el que he usado? – bdhar

+1

@Bharanidharan: Elimina los caracteres ASCII no imprimibles, que LTRIM/RTRIM no lo hace. –

+0

Bien. ¿Qué es un personaje ACSII no imprimible? ¿Es diferente de un espacio en blanco? – bdhar

1

... O, literalmente, podría simplemente copiar/pegar el blanco '' (espacio) en el extremo de un campo como resultado de la consulta en su estado de cuenta y reemplazar actualizar todo desde allí.

update TABLE1 
set notes = replace(notes, ' ', '') 
0

Y en caso de que tenga que recortar todos los espacios en todas las columnas, se puede utilizar este script para hacerlo de forma dinámica:

--Just change table name 
declare @MyTable varchar(100) 
set @MyTable = 'MyTable' 

--temp table to get column names and a row id 
select column_name, ROW_NUMBER() OVER(ORDER BY column_name) as id into #tempcols from INFORMATION_SCHEMA.COLUMNS 
WHERE DATA_TYPE IN ('varchar', 'nvarchar') and TABLE_NAME = @MyTable 

declare @tri int 
select @tri = count(*) from #tempcols 
declare @i int 
select @i = 0 
declare @trimmer nvarchar(max) 
declare @comma varchar(1) 
set @comma = ', ' 

--Build Update query 
select @trimmer = 'UPDATE [dbo].[' + @MyTable + '] SET ' 

WHILE @i <= @tri 
BEGIN 

    IF (@i = @tri) 
     BEGIN 
     set @comma = '' 
     END 
    SELECT @trimmer = @trimmer + CHAR(10)+ '[' + COLUMN_NAME + '] = LTRIM(RTRIM([' + COLUMN_NAME + ']))'[email protected] 
    FROM #tempcols 
    where id = @i 

    select @i = @i+1 
END 

--execute the entire query 
EXEC sp_executesql @trimmer 

drop table #tempcols 
Cuestiones relacionadas