我使用的是SQL Server MSDE 2000.我有一个名为notes
的字段,类型为nvarchar(65)。
内容为“Something”,在所有记录中的内容(为清晰起见)之后留有额外空格。我使用了以下命令。
UPDATE TABLE1
SET notes = RTRIM(LTRIM(notes))
但它不起作用。有没有其他方法可以做到这一点?
答案 0 :(得分: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
答案 1 :(得分:1)
... 或您可以在字段末尾复制/粘贴空白''(空格)作为查询替换语句的结果,并从那里更新所有内容。
update TABLE1
set notes = replace(notes, ' ', '')
答案 2 :(得分:0)
如果您需要TRIM所有列中的所有空格,您可以使用此脚本动态执行此操作:
--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