ОНОВЛЕННЯ та ЗАМІНА частини рядка


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 :( ... >> Msg 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/…
Аділ Х. Раза

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
З черги на огляд : чи можу я попросити вас додати деякий контекст навколо свого вихідного коду. Відповіді, що стосуються лише коду, важко зрозуміти. Це допоможе запитувачу та майбутнім читачам, якщо ви зможете додати більше інформації у своєму дописі.
РБТ

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'،')

довідка: dbo.TblNews - назва таблиці

keyWords - назва файлу

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.