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?


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)


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

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%'

17

consulta:

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

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)

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%


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 

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.


0

reemplazar por palabra persa

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

ayuda: dbo.TblNews - nombre de la tabla

keyWords - nombre de archivo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.