ОБНОВИТЬ и ЗАМЕНИТЬ часть строки


427

У меня есть таблица с двумя столбцами, IDи Value. Я хочу изменить часть некоторых строк во втором столбце.

Пример таблицы:

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

Теперь 123\в Valueстроке не нужно. Я попробовал UPDATEи REPLACE:

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

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


8
Это ничего не заменяет, потому что подстановочные знаки рассматриваются не как подстановочные знаки, а как литералы.
Stuhpa

Ответы:


700

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

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

(Я также добавил \в замену, поскольку я полагаю, что вам это тоже не нужно)


1
Это работает хорошо, но не с типом ntext :( ... >> Сообщение 8116, уровень 16, состояние 1, строка 21 - Тип данных аргумента ntext недопустим для аргумента 1 функции замены.
Owidat

6
Я только что нашел решение :) ===> stackoverflow.com/questions/4341613/…
Owidat

2
Подождите, что с `? isn't that escaping the символом '`и ошибочным?
Meekohi

Это было полезно
Стэнли Окпала Нвоса

Это не будет работать, если ваш тип столбца - «Текст» или «NText», см. Этот ответ stackoverflow.com/questions/4341613/…
Adil H. Raza

55

Попробуйте удалить %символы, как показано ниже

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

40

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

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


8

У вас есть одна таблица, где у вас есть код даты, который состоит из семи символов что-то вроде

"32-1000"

Теперь вы хотите заменить все

"32-"

С

"14-"

Вы должны выполнить SQL-запрос:

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)

3

Для тех, кто хочет заменить ваш сценарий.

update dbo.[TABLE_NAME] set COLUMN_NAME= replace(COLUMN_NAME, 'old_value', 'new_value') where COLUMN_NAME like %CONDITION%


4
Из очереди обзора : Могу ли я попросить вас добавить контекст вокруг вашего исходного кода. Ответы только на код трудно понять. Это поможет вам и будущим читателям, если вы сможете добавить больше информации в свой пост.
RBT

1
CREATE TABLE tbl_PersonalDetail
(ID INT IDENTITY ,[Date] nvarchar(20), Name nvarchar(20), GenderID int);

INSERT INTO Tbl_PersonalDetail VALUES(N'18-4-2015', N'Monay', 2),
                                     (N'31-3-2015', N'Monay', 2),
                                     (N'28-12-2015', N'Monay', 2),
                                     (N'19-4-2015', N'Monay', 2)

DECLARE @Date Nvarchar(200)

SET @Date = (SELECT [Date] FROM Tbl_PersonalDetail WHERE ID = 2)

Update Tbl_PersonalDetail SET [Date] = (REPLACE(@Date , '-','/')) WHERE ID = 2 

1
Пожалуйста, объясните, как ваш ответ решает проблему, он поможет каждому понять ваше решение с большей ясностью и для дальнейшего использования.
Азиз

1

Вы должны использовать приведенный ниже запрос на обновление

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id IN(1, 2, 3, 4)

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

Любой из вышеперечисленных запросов должен работать.


0

заменить на персидское слово

UPDATE dbo.TblNews
SET keyWords = REPLACE(keyWords, '-', N'،')

help: dbo.TblNews - имя таблицы

ключевые слова - имя файла

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.