Обновление и замена части строки
У меня есть таблица с двумя колонками: <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 ответ(ов)
Вам не нужны подстановочные знаки в функции 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
Чтобы удалить символы %
из столбца в таблице, вы можете использовать функцию REPLACE()
. Вот пример SQL-запроса для обновления значений в столбце Value
, заменяя символы %
на пустую строку:
UPDATE dbo.xxx
SET Value = REPLACE(Value, '%', '')
WHERE ID <= 4
Этот запрос обновит все записи в таблице dbo.xxx
, где ID
меньше или равен 4, удалив все символы %
из столбца Value
.
Чтобы сделать выполнение запроса быстрее в больших таблицах, где не требуется обновлять каждую строку, вы можете выбрать обновление только тех строк, которые будут изменены. Например, можно использовать следующий запрос:
UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'
Таким образом, вы обновите только те строки, в которых действительно есть подстрока '123', что поможет сократить время выполнения запроса.
Ваш запрос выглядит корректно для обновления значений в поле field_name
таблицы tablename
, заменяя все вхождения 'oldstring' на 'newstring', только если значения начинаются с 'oldstring'.
Однако, если вы хотите уточнить, что произойдет, если 'oldstring' является единственным значением в поле, то следует обратить внимание на то, что ваш запрос изменит все записи, соответствующие условию. Например, если 'oldstring' является единственным значением, оно будет заменено на 'newstring'.
Также стоит отметить, что если в поле field_name
содержится 'oldstring' в середине строки или в конце, такие записи не будут обновлены, так как вы используете условие LIKE ('oldstring%')
, которое ограничивает выборку строк только теми, которые начинаются с 'oldstring'.
Если у вас возникли дополнительные вопросы или если вам нужно более подробное объяснение, не стесняйтесь спрашивать!
Вам нужно обновить значения в столбце 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
соответствует вашему шаблону. Не забудьте сделать резервное копирование данных перед выполнением обновления!
Как удалить с использованием INNER JOIN в SQL Server?
Сброс начального значения идентификатора после удаления записей в SQL Server
Переименование столбца в SQL Server 2008
Как заменить символ по заданному индексу в JavaScript?
Как вставить перенос строки в строке VARCHAR/NVARCHAR SQL Server