UPDATE e REPLACE parte de uma string


427

Eu tenho uma mesa com duas colunas IDe Value. Eu quero mudar uma parte de algumas strings na segunda coluna.

Exemplo de tabela:

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

Agora 123\, a Valuestring não é necessária. Eu tentei UPDATEe REPLACE:

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

Quando executo o script, o SQL Server não relata um erro, mas também não atualiza nada. Por que é que?


8
Ele não substitui nada porque os curingas não são tratados como curingas, mas como literais.
Stuhpa 24/10/16

Respostas:


700

Você não precisa de curingas no REPLACE- ele apenas encontra a sequência digitada para o segundo argumento; portanto, o seguinte deve funcionar:

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

(Também adicionei o \na substituição, pois presumo que você também não precise)


1
Ele funciona em grade, mas não com o tipo ntext :( ... >> Msg 8116, Nível 16, Estado 1, Linha 21 - O tipo de dados do argumento ntext é inválido para o argumento 1 da função de substituição.
Owidat

6
Acabei de encontrar a solução :) ===> stackoverflow.com/questions/4341613/…
Owidat

2
Espere, o que há com o `? isn't that escaping the caractere `` e tornando isso incorreto?
Meekohi


Isso não vai funcionar se o seu tipo de coluna é texto ou NText, consulte esta resposta stackoverflow.com/questions/4341613/...
Adil H. Raza

55

Tente remover %caracteres como abaixo

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

40

Para acelerar a consulta em grandes tabelas em que nem todas as linhas precisam ser atualizadas, você também pode optar por atualizar apenas as linhas que serão modificadas:

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

17

inquerir:

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

pergunta perfeita Obrigado
Raju Paladiya

8

Você tem uma tabela na qual você tem o código da data, que tem sete caracteres, algo como

"32-1000"

Agora você deseja substituir todos

"32-"

Com

"14-"

A consulta SQL que você precisa executar é

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

3

Para quem quiser substituir o seu script.

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


4
Da fila de revisão : Posso solicitar que você adicione algum contexto ao seu código-fonte. As respostas somente de código são difíceis de entender. Isso ajudará os solicitantes e futuros leitores, se você puder adicionar mais informações em sua postagem.
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
Por favor, explique como sua resposta resolve o problema. Isso ajudará todos a entender sua solução com mais clareza e para referência futura.
Aziz

1

você deve usar a consulta de atualização abaixo

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

Qualquer uma das consultas acima deve funcionar.


0

substituir por palavra persa

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

ajuda: dbo.TblNews - nome da tabela

Palavras-chave - nome do usuário

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.