Ir para conteúdo
FabianoSouza

Tratar campo com REPLACE

Recommended Posts

Tenho um campo de descrição no meu sistema... nesse campo preciso fazer um replace de alguns "substrings" que podem existir.

Exemplos:

<apelido>apelido</apelido>

<saudacao>saudacao</saudacao>

 

Usando CASE e REPLACE para tratar essas substrings aí de cima, funciona para um caso ou para o outro, não ambos.

Vejam como estou aplicando o SQL.

...
, CASE 
WHEN MWA.descMsg LIKE '%'+'<saudacao>saudacao</saudacao>'+'%' Then 
REPLACE(MWA.descMsg, '<saudacao>saudacao</saudacao>', dbo.saudacao(GETDATE()))

 WHEN MWA.descMsg LIKE '%'+'<apelido>apelido</apelido>'+'%' Then 
REPLACE(MWA.descMsg, '<apelido>apelido</apelido>', '[Apelido]')

ELSE MWA.descMsg
END AS msg
...

Preciso fazer com que esse tratamento seja aplicado para todas as situações, não apenas para uma das duas situações.

O lance é que não tenho como colocar o campo tratado numa variável e ir aplicando o tratamento a ela de forma isolada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A MWA.descMsgpode ter ambos ?

 

Citar

funciona para um caso ou para o outro, não ambos.

 

Explique melhor , mostre a saída dos dados.

 

No Case se entrar num "when" os seguintes não são tratados mesmo que verdadeiros.

Compartilhar este post


Link para o post
Compartilhar em outros sites
17 horas atrás, Motta disse:

A MWA.descMsgpode ter ambos ?

 

 

Explique melhor , mostre a saída dos dados.

 

No Case se entrar num "when" os seguintes não são tratados mesmo que verdadeiros.

Sim, MWA.descMsg pode ter os dois valores. Mas quando há os dois valores, apenas uma das situações acaba sendo tratada pelo CASE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que encontrei uma solução.

 

Criei uma function chamada dbo.trataMsgWhatsApp.

Está funcionando.

A function é assim:

...

(@string as varchar(5000))
Returns varchar(5000)
As
Begin
    Set @string = Replace(@string,'<saudacao>saudacao</saudacao>', dbo.saudacao(GETDATE()));
	Set @string = Replace(@string,'<apelido>apelido</apelido>','[Apelido]');
    Return @string
End
...

Aí aplico no SELECT assim:

... dbo.trataMsgWhatsApp(MWA.descMsg ) as msg

 

Mas essa function ainda tem uma limitação: se eu usar na minha string a substring <apelido>apelido</apelido> repetidas vezes (algo que sem dúvida acontecerá), o replace não fará todas as substituições necessárias.

 

Aceito sugestões para contornar esse novo problema.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • Por usuario181474618518
      Bom dia a todos! 
       
      Estou iniciando em PHP, então talvez isso seja uma pergunta burra. Estou utilizando uma plataforma que fornece um array de categorias como digitado abaixo, e minha ideia é fazer uma busca no conteúdo por essas categorias, e substituir elas por outro array, que no caso terá as mesmas categorias, no entanto, com links. Veja:
      $conteudo = "Meu conteúdo Filmes Laranja e Verde. Blackout."; $from = array( 0 => "Laranja", 1 => "Azul", 2 => "Vermelho", 3 => "Verde", 4 => "Black" ); $to = array( 0 => "<a href='#laranja'>Laranja</a>", 1 => "<a href='#azul'>Azul</a>", 2 => "<a href='#vermelho'>Vermelho</a>", 3 => "<a href='#verde'>Verde</a>", 4 => "<a href='#ver'>Black</a>" ); $novoconteudo = strtr($conteudo, array_combine($from, $to)); echo $novoconteudo;  
      O máximo que conseguir fazer foi usando strtr, no entanto acaba fazendo algumas substituições "burras", como por exemplo adicionar link em "Black" quando na verdade a palavra é "Blackout". Acredito que para resolver isso, deveria ser feito com preg_replace, porém já tentei e não consegui. Alguém pode me ajudar?
       
      Veja: http://sandbox.onlinephpfunctions.com/code/e7cfd27ea182041de0519df3ed22bedc93cda18b
    • Por FabianoSouza
      Olá pessoal. Tenho uma base com uns 5.000 registros.
      Quero fazer um código para aplicar acento em nomes que foram gravados sem sua respectiva acentuação.
       
      Parte 1
      Até consegui montar uma código para testes usando UPDATE e replace.
      Mas da forma como criei, se peço para acentuar a string Jose, acaba acentuando também Josevaldo (pois ambos tem a string "jose")
      Preciso de um código que pegue cada parte do nome  (primeiro nome, nome do meio e último nome) da pessoa e verifique se há o valor passível de aplicar a acentuação.
       
      Exemplo:
      Jose Amancio dos Santos - teria que aplicar acento no Jose e em Amancio.
      Josevaldo Pires Silva - não deve aplicar acento em Josevaldo
       
       
      Parte 2
      Como isso será uma rotina, quero ter um "dicionário" de nomes gravados da forma correta (acentuados) para serem usados na rotina de que aplicaria a acentuação.
      Queria ver sugestões de como montar esse "dicionário". Seria um array? Seria ler uma tabela?
       
       
      Podem ajudar?

      Valew!
       
    • Por FabianoSouza
      Pessoal, to apanhando para criar uma function para remover a última vírgula que aparece na string chamada beneficios.
      Estava tentando isso:
      ... REVERSE(STUFF(REVERSE( ---------------------------------- CASE WHEN valeTransporte = '1' Then 'Vale-transporte,' ELSE '' END + CASE WHEN valeRefeicao = '1' Then 'Vale-refeição,' ELSE '' END + CASE WHEN seguroDeVida = '1' Then 'Seguro de vida,' ELSE '' END ---------------------------------- ), 1, 1, '')) AS 'beneficios' ... O problema é que nem sempre haverá string para ser tratada, aí o campo aparece como NULL e gera problema na hora de gerar um JSON pela aplicação.
      Preciso de uma function que previna a situação de não haver string, e retorne valor vazio (não NULL).
       
      Valew!
       
    • Por Rui PG
      Boa tarde, Pessoal"
       
      Sou iniciante em SQL, em uma tabela do nosso BD tempos um campo que possui o registro com as informações do paciente concatenado com uma serie de valores que não precisamos.
      Como eu faço, para montar uma select para extrair desse registro apenas o que está entre aspas?
       
      O meu registro está assim:
      a:28:{i:18;s:13:"Sérgio silva";i:19;s:11:"1199900001";i:20;s:0:"n/i";i:21;s:0:"n/i";i:23;s:15:"Amil One Health";i:24;s:0:"n/i";i:27;s:0:"n/i";i:31;s:1:"2";i:32;s:0:"n/i";i:33;s:1:"2";i:34;s:0:;}
       
      Eu preciso dele assim:
      "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";
       
      Observação, esses monte de valores a:28: ...etc... eles mudam, não são valores fixos, se fossem até usaria o replace, mas são vários valores.
       
      Depois que eu chegar nessa mineração: "Sérgio silva";"1199900001";"n/i";"n/i";"Amil One Health";"n/i";"n/i";"2";"n/i";"2";
      Como eu faço para alocar cada valor em campo campo qualquer, pode ser uma tabela temporária, tipo assim:
       
      |nome           |campo 1        |Campo 2 |Campo 3 |Campo 4               |Campo  5 | .....
      |Sérgio silva|1199900001|n/i              |n/i              |Amil One Health|n/i               |n/i|2|n/i|2| .....
       
      Muito obrigado amigos
       
       
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.