2013-06-28 18 views
251

Ho un tavolo con due colonne, ID e Value. Voglio cambiare una parte di alcune stringhe nella seconda colonna.AGGIORNA e SOSTITUISCI parte di una stringa

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 il 123\ nella stringa Value non è necessario. Ho provato UPDATE e 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é?

+4

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

risposta

422

Non è necessario jolly nel REPLACE - solo trova la stringa immessa per il secondo argomento, quindi il seguente dovrebbe funzionare:

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

(ho anche aggiunto il \ nel sostituire se presumo che non è necessario che sia)

+1

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

+6

Ho appena trovato la soluzione :) ===> http://stackoverflow.com/questions/4341613/alternatives-to-replace-on-a-text-or-ntext-datatype – Owidat

+1

Aspetta, cosa succede con '\'?non è quello che sfugge al carattere '' 'e lo rende scorretto? – Meekohi

37

tenta di rimuovere % caratteri, come di seguito

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

per rendere il quer y corsa più veloce in grandi tavoli dove non ogni linea deve essere aggiornato, si può anche scegliere di solo le righe di aggiornamento che saranno modificati:

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

avete uno tabella in cui si dispone di codice data che è di sette caratteri qualcosa come

"32-1000" 

Ora si vuole sostituire tutti

"32-" 

Con

"14-" 

La query SQL è necessario eseguire è

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here) 
0
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 capire la tua soluzione con maggiore chiarezza e riferimento futuro. – Aziz

1

si dovrebbe usare la query di aggiornamento sotto

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 di cui sopra dovrebbe funzionare.

0

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% 
+3

** Dalla coda di revisione **: Posso chiederti di aggiungere un po 'di contesto attorno al tuo codice sorgente. Le risposte al solo codice sono difficili da capire. Aiuterà il richiedente e i futuri lettori sia se puoi aggiungere ulteriori informazioni nel tuo post. – RBT

-1

query:

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