web-dev-qa-db-fra.com

UPDATE et REPLACE partie d'une chaîne

J'ai un tableau avec deux colonnes, ID et Value. Je veux changer une partie de certaines chaînes dans la deuxième colonne.

Exemple de tableau:

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

Maintenant, le 123\ dans la chaîne Value n'est pas nécessaire. J'ai essayé UPDATE et REPLACE:

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

Lorsque j'exécute le script, SQL Server ne signale pas d'erreur, mais ne met rien à jour non plus. Pourquoi donc?

377
aston_zh

Vous n'avez pas besoin de caractères génériques dans REPLACE - il ne fait que trouver la chaîne que vous avez entrée pour le deuxième argument. Les éléments suivants devraient donc fonctionner:

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

(J'ai aussi ajouté le \ au remplacement car je suppose que vous n'en avez pas besoin non plus)

620
Jon Egerton

Essayez de supprimer % caractères comme ci-dessous

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

Pour que la requête soit exécutée plus rapide dans les grandes tables où toutes les lignes ne doivent pas être mises à jour, vous pouvez également choisir de ne mettre à jour que les lignes qui seront modifiées:

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

requete:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');
11
maneesh

Vous avez une table où vous avez un code de date qui est composé de sept caractères, comme

"32-1000"

Maintenant, vous voulez remplacer tout

"32-"

Avec

"14-"

La requête SQL que vous devez exécuter est

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

Pour quiconque veut remplacer votre script.

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

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
Mike Clark

vous devez utiliser la requête de mise à jour ci-dessous

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

Chacune des requêtes ci-dessus devrait fonctionner.

1
DotnetCoder