Zaktualizuj i zamień część ciągu znaków

Mam tabelę z dwoma kolumnami, ID i Value. Chcę zmienić część niektórych ciągów w drugiej kolumnie.

Przykład tabeli:

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

Teraz 123\ w łańcuchu Value nie jest potrzebne. Próbowałem UPDATE i REPLACE:

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

Kiedy wykonuję skrypt SQL Server nie zgłasza błędu, ale też niczego nie aktualizuje. Dlaczego?

Author: Beth, 2013-06-28

8 answers

Nie potrzebujesz symboli wieloznacznych w REPLACE - po prostu znajduje łańcuch, który wprowadzasz dla drugiego argumentu, więc powinno działać:

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

(dodałem również \ w replace, ponieważ zakładam, że tego też nie potrzebujesz)

 499
Author: Jon Egerton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-25 08:09:40

Spróbuj usunąć % znaki jak poniżej

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4
 42
Author: Parado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-28 12:56:36

Aby zapytanie uruchamiało się szybciej w dużych tabelach, gdzie nie każda linia wymaga aktualizacji, możesz również wybrać tylko te wiersze, które zostaną zmodyfikowane:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'
 28
Author: xinux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 09:03:39

Zapytanie:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');
 7
Author: maneesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-23 00:35:19

Masz jedną tabelę, w której masz kod daty, który jest siedmioznakowy, coś w stylu

"32-1000"

Teraz chcesz zastąpić wszystkie

"32-"

Z

"14-"

Zapytanie SQL, które musisz uruchomić to

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)
 6
Author: RASKOLNIKOV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-20 07:52:11

Dla każdego, kto chce zastąpić Twój skrypt.

>  update dbo.[TABLE_NAME] set COLUMN_NAME= replace(COLUMN_NAME, 'old_value', 'new_value') where COLUMN_NAME like %CONDITION%
 2
Author: あおい あの そら,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-15 09:24:00

Powinieneś użyć poniższego zapytania aktualizacyjnego

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

Jedno z powyższych zapytań powinno zadziałać.

 1
Author: DotnetCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-30 13:26:55
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 
 0
Author: Mike Clark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-03 11:39:31