6

Обновление и замена части строки

26

У меня есть таблица с двумя колонками: <code>ID</code> и <code>Value</code>. Я хочу изменить часть некоторых строк во второй колонке.

Вот пример таблицы:

ID            Value
---------------------------------
1             c:\temp\123\abc\111
2             c:\temp\123\abc\222
3             c:\temp\123\abc\333
4             c:\temp\123\abc\444

Теперь строка <code>123\</code> в строке <code>Value</code> не нужна. Я попробовал использовать команды <code>UPDATE</code> и <code>REPLACE</code>:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '%123%', '')
WHERE ID <= 4

Когда я выполняю этот скрипт, SQL Server не выдает никаких ошибок, но ничего и не обновляет. Почему так происходит?

5 ответ(ов)

9

Вам не нужны подстановочные знаки в функции REPLACE — она просто ищет строку, которую вы указываете во втором аргументе, поэтому следующий запрос должен сработать:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4

Если столбец, который вы хотите заменить, имеет тип text или ntext, вам необходимо привести его к типу nvarchar:

UPDATE dbo.xxx
SET Value = REPLACE(CAST(Value AS nvarchar(4000)), '123', '')
WHERE ID <= 4
0

Чтобы удалить символы % из столбца в таблице, вы можете использовать функцию REPLACE(). Вот пример SQL-запроса для обновления значений в столбце Value, заменяя символы % на пустую строку:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '%', '')
WHERE ID <= 4

Этот запрос обновит все записи в таблице dbo.xxx, где ID меньше или равен 4, удалив все символы % из столбца Value.

0

Чтобы сделать выполнение запроса быстрее в больших таблицах, где не требуется обновлять каждую строку, вы можете выбрать обновление только тех строк, которые будут изменены. Например, можно использовать следующий запрос:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'

Таким образом, вы обновите только те строки, в которых действительно есть подстрока '123', что поможет сократить время выполнения запроса.

0

Ваш запрос выглядит корректно для обновления значений в поле field_name таблицы tablename, заменяя все вхождения 'oldstring' на 'newstring', только если значения начинаются с 'oldstring'.

Однако, если вы хотите уточнить, что произойдет, если 'oldstring' является единственным значением в поле, то следует обратить внимание на то, что ваш запрос изменит все записи, соответствующие условию. Например, если 'oldstring' является единственным значением, оно будет заменено на 'newstring'.

Также стоит отметить, что если в поле field_name содержится 'oldstring' в середине строки или в конце, такие записи не будут обновлены, так как вы используете условие LIKE ('oldstring%'), которое ограничивает выборку строк только теми, которые начинаются с 'oldstring'.

Если у вас возникли дополнительные вопросы или если вам нужно более подробное объяснение, не стесняйтесь спрашивать!

0

Вам нужно обновить значения в столбце Code таблицы Products, заменив все вхождения подстроки "32-" на "14-". SQL-запрос, который вы должны выполнить, выглядит следующим образом:

UPDATE Products 
SET Code = REPLACE(Code, '32-', '14-') 
WHERE ... (здесь укажите ваше условие)

Условие в блоке WHERE зависит от ваших конкретных требований к отбору записей. Например, если вы хотите изменить только те записи, где Code начинается с "32-", вы можете использовать следующее условие:

WHERE Code LIKE '32-%'

Таким образом, финальный запрос будет выглядеть так:

UPDATE Products 
SET Code = REPLACE(Code, '32-', '14-') 
WHERE Code LIKE '32-%'

Этот запрос заменит все вхождения "32-" на "14-" только в тех строках, где Code соответствует вашему шаблону. Не забудьте сделать резервное копирование данных перед выполнением обновления!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь