Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
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.
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 @stringAí 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.O replace troca tudo que tiver na @string.
Obrigado @Motta
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.