none
Replace em campo texto RRS feed

  • Pergunta

  • Ola pessoal

    Tenho um campo texto, dentro de uma tabela, o conteudo que esta dentro deste campo tem dois caracteres da seguinte forma:

    (ka/ka), eu preciso alterar para (jl/mn), como eu posso fazer isso? posso usar o replace? tem alguma forma segura?

    Pode alguem me dar um exemplo?

    terça-feira, 13 de novembro de 2018 15:12

Respostas

  • Boa tarde,

    Acredito que você possa utilizar a função Replace conforme o exemplo abaixo:

    update Tabela
    set Coluna = Replace(Columa, 'ka/ka', 'jl/mn')

    Se preferir você pode fazer um teste antes para ver o resultado do comando acima:

    select Coluna, Replace(Coluna, 'ka/ka', 'jl/mn') as NovoValor
    from Tabela

    Acho que você poderá ter problema apenas se existir a possibilidade de ter outra ocorrência dos caracteres 'ka/ka' nessa coluna que não deve ser alterada.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:18
    terça-feira, 13 de novembro de 2018 16:30
  • Olá, Luis!

       Pode ser com replace sim, como no exemplo abaixo:

    declare @tab as table
    (
    	Id			int identity,
    	CampoTexto	varchar(50)
    )
    
    insert into @tab (CampoTexto) values ('ka/ka'), ('sdsdka/ka dsa'), ('Ha/Ha'), ('ka/ka'), ('Ha/Ha'), ('Ka/Ha'), ('dsda ka/kadsda'), ('Ka/Ha'), ('ka/ka'), ('ka/ka')
    
    select * from @tab
    
    update @tab set CampoTexto = REPLACE(CampoTexto, 'Ka/Ka', 'jl/mn') where CampoTexto like '%Ka/Ka%'
    
    select * from @tab

    Observe que, no exemplo, considerei que possa existir mais informações neste campo, que não somente os caracteres Ka/Ka. Mas se sempre for somente isto, você pode comparar com sinal de = mesmo, e não like. Quato a ter uma forma segura, sugiro que você faça um backup desta tabela antes, e depois você pode executar até uma comparação entre as duas para conferir se ficou tudo certo mesmo. Em caso de erro, você tem os valores antigos no backup para restaurar. Utilize o exemplo que enviei para fazer outros testes se precisar.

    Espero que ajude. Bom trabalho!

    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:18
    terça-feira, 13 de novembro de 2018 16:32
  • estou com este erro

    Msg 8116, Level 16, State 1, Line 31
    Argument data type ntext is invalid for argument 1 of replace function.

    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:18
    terça-feira, 13 de novembro de 2018 16:49
  • Você pode converter o tipo de dado:

    declare @tab as table
    (
    	Id			int identity,
    	CampoTexto	ntext
    )
    
    insert into @tab (CampoTexto) values ('ka/ka'), ('sdsdka/ka dsa'), ('Ha/Ha'), ('ka/ka'), ('Ha/Ha'), ('Ka/Ha'), ('dsda ka/kadsda'), ('Ka/Ha'), ('ka/ka'), ('ka/ka')
    
    select * from @tab
    
    update @tab set CampoTexto = CAST(REPLACE(CAST(CampoTexto as varchar), 'Ka/Ka', 'jl/mn') as ntext) where CampoTexto like '%Ka/Ka%'
    
    select * from @tab


    • Editado Rodrigo CdS terça-feira, 13 de novembro de 2018 17:03
    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:17
    terça-feira, 13 de novembro de 2018 17:02
  • Deleted
    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:17
    terça-feira, 13 de novembro de 2018 21:30

Todas as Respostas

  • Boa tarde,

    Acredito que você possa utilizar a função Replace conforme o exemplo abaixo:

    update Tabela
    set Coluna = Replace(Columa, 'ka/ka', 'jl/mn')

    Se preferir você pode fazer um teste antes para ver o resultado do comando acima:

    select Coluna, Replace(Coluna, 'ka/ka', 'jl/mn') as NovoValor
    from Tabela

    Acho que você poderá ter problema apenas se existir a possibilidade de ter outra ocorrência dos caracteres 'ka/ka' nessa coluna que não deve ser alterada.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:18
    terça-feira, 13 de novembro de 2018 16:30
  • Olá, Luis!

       Pode ser com replace sim, como no exemplo abaixo:

    declare @tab as table
    (
    	Id			int identity,
    	CampoTexto	varchar(50)
    )
    
    insert into @tab (CampoTexto) values ('ka/ka'), ('sdsdka/ka dsa'), ('Ha/Ha'), ('ka/ka'), ('Ha/Ha'), ('Ka/Ha'), ('dsda ka/kadsda'), ('Ka/Ha'), ('ka/ka'), ('ka/ka')
    
    select * from @tab
    
    update @tab set CampoTexto = REPLACE(CampoTexto, 'Ka/Ka', 'jl/mn') where CampoTexto like '%Ka/Ka%'
    
    select * from @tab

    Observe que, no exemplo, considerei que possa existir mais informações neste campo, que não somente os caracteres Ka/Ka. Mas se sempre for somente isto, você pode comparar com sinal de = mesmo, e não like. Quato a ter uma forma segura, sugiro que você faça um backup desta tabela antes, e depois você pode executar até uma comparação entre as duas para conferir se ficou tudo certo mesmo. Em caso de erro, você tem os valores antigos no backup para restaurar. Utilize o exemplo que enviei para fazer outros testes se precisar.

    Espero que ajude. Bom trabalho!

    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:18
    terça-feira, 13 de novembro de 2018 16:32
  • deu este erro

    Argument data type ntext is invalid for argument 1 of replace function.

    terça-feira, 13 de novembro de 2018 16:46
  • estou com este erro

    Msg 8116, Level 16, State 1, Line 31
    Argument data type ntext is invalid for argument 1 of replace function.

    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:18
    terça-feira, 13 de novembro de 2018 16:49
  • Você pode converter o tipo de dado:

    declare @tab as table
    (
    	Id			int identity,
    	CampoTexto	ntext
    )
    
    insert into @tab (CampoTexto) values ('ka/ka'), ('sdsdka/ka dsa'), ('Ha/Ha'), ('ka/ka'), ('Ha/Ha'), ('Ka/Ha'), ('dsda ka/kadsda'), ('Ka/Ha'), ('ka/ka'), ('ka/ka')
    
    select * from @tab
    
    update @tab set CampoTexto = CAST(REPLACE(CAST(CampoTexto as varchar), 'Ka/Ka', 'jl/mn') as ntext) where CampoTexto like '%Ka/Ka%'
    
    select * from @tab


    • Editado Rodrigo CdS terça-feira, 13 de novembro de 2018 17:03
    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:17
    terça-feira, 13 de novembro de 2018 17:02
  • Deleted
    • Marcado como Resposta Luis Padilha quarta-feira, 14 de novembro de 2018 17:17
    terça-feira, 13 de novembro de 2018 21:30