Я использую SQL-сервер MSDE 2000. У меня есть поле под названием notes
типа nvarchar (65).
Содержимое "Something" с дополнительным пространством после содержимого (кавычки для ясности) во всех записях. Я использовал следующую команду.
UPDATE TABLE1
SET notes = RTRIM(LTRIM(notes))
Но это не сработает. Есть ли альтернативный способ сделать это?
Ответ 1
Вы уверены, что запрос не работает? Попробуйте:
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
Ответ 2
... ИЛИ, вы можете буквально просто скопировать/вставить пустое поле '' (пробел) в конце поля в результате вашего запроса в ваш оператор replace и обновить все оттуда.
update TABLE1
set notes = replace(notes, ' ', '')
Ответ 3
И на всякий случай вам нужно TRIM все пробелы во всех столбцах, вы можете использовать этот script, чтобы сделать это динамически:
--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