ACTUALIZAR y REEMPLAZAR parte de una cadena

427

Tengo una mesa con dos columnas, IDy Value. Quiero cambiar una parte de algunas cadenas en la segunda columna.

Ejemplo de tabla:

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

Ahora no se necesita 123\en la Valuecadena. Lo intenté UPDATEy REPLACE:

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

Cuando ejecuto el script, SQL Server no informa un error, pero tampoco actualiza nada. ¿Porqué es eso?

aston_zh
fuente
8
No reemplaza nada porque los comodines no se tratan como comodines sino como literales.
stuhpa

Respuestas:

700

No necesita comodines en el REPLACE, solo encuentra la cadena que ingresa para el segundo argumento, por lo que lo siguiente debería funcionar:

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

(También agregué el \en el reemplazo ya que supongo que tampoco lo necesitas)

Jon Egerton
fuente
1
Funciona bien, pero no con ntext type :( ... >> Msg 8116, Level 16, State 1, Line 21 - El tipo de datos de argumento ntext no es válido para el argumento 1 de la función replace.
Owidat
66
Acabo de encontrar la solución :) ===> stackoverflow.com/questions/4341613/…
Owidat
2
Espera, ¿qué pasa con el carácter `? isn't that escaping the '' y lo hace incorrecto?
Meekohi el
Esto fue útil
Stanley Okpala Nwosa
Esto no funcionará si su tipo de columna es Text o NText, vea esta respuesta stackoverflow.com/questions/4341613/…
Adil H. Raza
55

Intenta eliminar los %caracteres como se muestra a continuación

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

Para que la consulta se ejecute más rápido en tablas grandes donde no es necesario actualizar todas las líneas, también puede optar por actualizar solo las filas que se modificarán:

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

consulta:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');
maneesh
fuente
consulta perfecta Gracias
Raju Paladiya
8

Tienes una tabla donde tienes un código de fecha que tiene siete caracteres, algo así como

"32-1000"

Ahora quieres reemplazar todo

"32-"

Con

"14-"

La consulta SQL que debe ejecutar es

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

Para cualquiera que quiera reemplazar su script.

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

ManhNguyen
fuente
44
De la cola de revisión : ¿Puedo solicitarle que agregue algo de contexto alrededor de su código fuente? Las respuestas de solo código son difíciles de entender. Ayudará tanto al autor de la pregunta como a los futuros lectores si puede agregar más información en su publicación.
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
fuente
1
Explique cómo su respuesta resuelve el problema, ayudará a todos a comprender su solución con más claridad y para futuras referencias.
Aziz
1

deberías usar la siguiente consulta de actualización

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

Cualquiera de las consultas anteriores debería funcionar.

DotnetCoder
fuente
0

reemplazar por palabra persa

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

ayuda: dbo.TblNews - nombre de la tabla

keyWords - nombre de archivo

سیدرسول میرعظیمی
fuente