Удалить конечное пустое пространство в полевом содержимом

Я использую 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 + ']))'[email protected]
    FROM    #tempcols
    where id = @i

    select @i = @i+1
END

--execute the entire query
EXEC sp_executesql @trimmer

drop table #tempcols