AGGIORNA e SOSTITUISCI parte di una stringa


427

Ho un tavolo con due colonne IDe Value. Voglio cambiare una parte di alcune stringhe nella seconda colonna.

Esempio di tabella:

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

Ora l' 123\nella Valuestringa non è necessario. Ho provato UPDATEe REPLACE:

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

Quando eseguo lo script SQL Server non segnala un errore, ma non aggiorna nulla. Perché?


8
Non sostituisce nulla perché i caratteri jolly non sono trattati come caratteri jolly ma piuttosto come valori letterali.
stuhpa,

Risposte:


700

Non hai bisogno di caratteri jolly nel REPLACE: trova solo la stringa che inserisci per il secondo argomento, quindi dovrebbe funzionare quanto segue:

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

(Ho anche aggiunto la \sostituzione in quanto presumo che non sia necessario)


1
Funziona a griglia, ma non con il tipo ntext :( ... >> Messaggio 8116, livello 16, stato 1, riga 21 - Il tipo di dati argomento ntext non è valido per l'argomento 1 della funzione di sostituzione.
Owidat,

6
Ho appena trovato la soluzione :) ===> stackoverflow.com/questions/4341613/...
Owidat

2
Aspetta, che cos'è il `? isn't that escaping the carattere `` e che rende questo errato?
Meekohi,

Questo è stato utile
Stanley Okpala Nwosa,

Questo non funzionerà se il tuo tipo di colonna è Testo o NText, vedi questa risposta stackoverflow.com/questions/4341613/…
Adil H. Raza,

55

Prova a rimuovere i %caratteri come di seguito

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

40

Per rendere la query più veloce nelle tabelle di grandi dimensioni in cui non è necessario aggiornare tutte le righe, è anche possibile scegliere di aggiornare solo le righe che verranno modificate:

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

17

query:

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

domanda perfetta Grazie
Raju Paladiya il

8

Hai una tabella in cui hai il codice della data che è di sette caratteri qualcosa del genere

"32-1000"

Ora vuoi sostituire tutto

"32-"

Con

"14-"

La query SQL che devi eseguire è

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

3

Per chiunque voglia sostituire il tuo script.

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


4
Dalla coda di revisione : posso chiederti di aggiungere un po 'di contesto attorno al tuo codice sorgente. Le risposte di solo codice sono difficili da capire. Aiuterà il richiedente e i futuri lettori sia se è possibile aggiungere ulteriori informazioni nel tuo post.
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
Spiega come la tua risposta risolve il problema, aiuterà tutti a comprendere la tua soluzione con maggiore chiarezza e per riferimento futuro.
Aziz,

1

dovresti usare la seguente query di aggiornamento

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

Entrambe le query sopra dovrebbero funzionare.


0

sostituire per parola persiana

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

aiuto: dbo.TblNews - nome della tabella

parole chiave - nome del fild

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.