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?

aston_zh
la source
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)

Jon Egerton
la source
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
Robert
la source
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%'
xinux
la source
17

requete:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');
maneesh
la source
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)
RASKOLNIKOV
la source
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%

ManhNguyen
la source
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 
Mike Clark
la source
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.

DotnetCoder
la source
0

remplacer pour mot persan

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

help: dbo.TblNews - nom de la table

keyWords - nom fild

سیدرسول میرعظیمی
la source