9

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

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

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

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

4

3 回答 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
于 2009-12-08T05:49:00.053 回答
0

...或者您可以将查询结果复制/粘贴到字段末尾的空白“ ”(空格)到您的替换语句中,然后从那里更新所有内容。

update TABLE1
set notes = replace(notes, ' ', '')
于 2013-09-10T22:52:49.983 回答
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
于 2014-03-07T22:13:27.037 回答