删除字段内容中的尾随空格

问题描述:

我正在使用SQL Server MSDE 2000.我有一个名为notes的字段为nvarchar(65)的字段。删除字段内容中的尾随空格

在所有记录中的内容(清晰引用)之后,内容为“某物”,并带有额外的空间。我使用了下面的命令。

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

但它不起作用。有没有其他方法可以做到这一点?

+2

什么叫“不工作”是什么意思?它应该...... – 2009-12-08 05:43:12

+0

不确定。查询得到正确执行,我得到'(受影响的12539行)'消息''。但该领域仍然具有尾随空间的价值。 – bdhar 2009-12-08 05:44:58

+0

你看着正确的服务器实例,表?我之前做过... – 2009-12-08 05:46:35

确定该查询无法正常工作?尝试:

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

TOP 100将结果限制为前100行,足以让一个想法,如果有真正的输出空间。如果有,并且RTRIM/LTRIM不删除它 - 那么你没有处理空白字符。在这种情况下,尝试:

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

这一个工程。这和我用过的有什么区别? – bdhar 2009-12-08 06:09:49

+1

@Bharanidharan:它删除不可打印的ASCII字符,LTRIM/RTRIM不会。 – 2009-12-08 06:13:44

+0

好。什么是不可打印的ACSII角色?它与空白区不同吗? – bdhar 2009-12-08 06:15:25

... OR你可以从字面上只是复制/粘贴在一个字段的末尾空白'(空间)作为查询的结果到您的REPLACE语句和从那里更新一切。

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

而且万一你需要修剪所有空格中的所有列,你可以使用这个脚本来动态地做到这一点:

--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