Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

FabianoSouza

Remover última vírgula da string

Recommended Posts

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!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE OR FUNCTION dbo.FtiraVirgura (@texto varchar(max))  
RETURNS varchar(max)  
WITH EXECUTE AS CALLER  
AS  
BEGIN 
    IF @texto IS NULL
    BEGIN
        SET @texto = '';
       
    END
    ELSE
    BEGIN
        IF  (SELECT  CHARINDEX(',',RIGHT(@texto,1),1) ) = 1  -- Existe virgula no final da string 
        BEGIN
             SET @texto = SUBSTRING(@texto,1,LEN(@texto) -1 )
        END
       
    END

     RETURN(@texto);  
END;  
GO

DECLARE @texto varchar(max) = NULL
GO
select dbo.FtiraVirgura(@texto)
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • 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 FabianoSouza
      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.
    • 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 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.