METTRE À JOUR et REMPLACER une partie d'une chaîne


427

J'ai un tableau avec deux colonnes, IDet 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 Valuechaîne n'est plus nécessaire. J'ai essayé UPDATEet 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 il ne met rien à jour non plus. Pourquoi donc?


8
Il ne remplace rien car les caractères génériques ne sont pas traités comme des caractères génériques mais plutôt comme des littéraux.
stuhpa

Réponses:


700

Vous n'avez pas besoin de caractères génériques dans le REPLACE- il trouve juste la chaîne que vous entrez pour le deuxième argument, donc ce qui suit devrait fonctionner:

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

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


1
Cela fonctionne, mais pas avec le type ntext :( ... >> Msg 8116, niveau 16, état 1, ligne 21 - Le type de données d'argument ntext n'est pas valide pour l'argument 1 de la fonction de remplacement.
Owidat

6
Je viens de trouver la solution :) ===> stackoverflow.com/questions/4341613/…
Owidat

2
Attendez, qu'est-ce que le `? isn't that escaping the caractère `` et le rendre incorrect?
Meekohi

Cela a été utile
Stanley Okpala Nwosa

Cela ne fonctionnera pas si votre type de colonne est Texte ou NText, voir cette réponse stackoverflow.com/questions/4341613/…
Adil H. Raza

55

Essayez de supprimer les %caractères comme ci-dessous

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

40

Pour accélérer l' exécution de la requête dans les grandes tables où toutes les lignes n'ont pas besoin d'ê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%'

17

requete:

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

requête parfaite Merci
Raju Paladiya

8

Vous avez une table où vous avez le code de date qui est quelque chose de sept caractères comme

"32-1000"

Maintenant, vous voulez tout remplacer

"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)

3

Pour tous ceux qui veulent remplacer votre script.

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


4
De la file d'attente de révision : Puis-je vous demander de bien vouloir ajouter du contexte autour de votre code source. Les réponses uniquement codées sont difficiles à comprendre. Cela aidera le demandeur et les futurs lecteurs à la fois si vous pouvez ajouter plus d'informations dans votre message.
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
Veuillez expliquer comment votre réponse résout le problème, cela aidera tout le monde à comprendre votre solution avec plus de clarté et pour référence future.
Aziz

1

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

L'une ou l'autre des requêtes ci-dessus devrait fonctionner.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.