在字段内容中删除末尾的空格

9

我正在使用SQL Server MSDE 2000。我有一个名为notes的字段,类型为nvarchar(65)。

所有记录中的内容都是'Something ',内容后面有一个额外的空格(引号是为了清晰起见)。我使用了以下命令:

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

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

2
你所说的“不起作用”是什么意思?它应该... - Mitch Wheat
不确定。查询已成功执行,我收到了消息“(受影响的行数为12539行)”。但该字段仍具有带尾随空格的值。 - bdhar
你正在查看正确的服务器实例和表格吗?我以前做过这个... - Mitch Wheat
RTRIM 应该可以正常工作。你确定后面的字符实际上是一个空格吗?你可能需要检查你正在使用的排序规则和字节值。 - womp
3个回答

11

您确定查询不起作用吗?请尝试:

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

这个可以工作。这个和我用的那个有什么区别? - bdhar
1
它可以移除非打印的ASCII字符,而LTRIM/RTRIM则不能。 - OMG Ponies
好的。什么是不可打印的ACSII字符?它和空格有什么区别吗? - bdhar
2
前32个值是不可打印的控制字符,例如回车(十进制值13)和换行(十进制值10):http://www.csgnetwork.com/asciiset.html - OMG Ponies

0

...或者您可以直接复制/粘贴查询结果中字段末尾的空白' '(空格),将其作为替换语句并更新所有内容。

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

0

如果您需要在所有列中修剪所有空格,您可以使用此脚本动态执行:

--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 + ']))'+@comma
    FROM    #tempcols
    where id = @i

    select @i = @i+1
END

--execute the entire query
EXEC sp_executesql @trimmer

drop table #tempcols

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接