none
Substituir número por letra RRS feed

  • Pergunta

  • Boa tarde!

    Amigos, tenho uma necessidade e não estou sabendo como fazer.

    Em uma determinada tabela, existe uma coluna onde é exibida mensagens de diversos tipos e junto a estas mensagens, existe códigos numéricos, como segue abaixo:

    Tipo: E. Mensagem: Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada

    Tipo: E. Mensagem: Até agora só              646 PC para precedente 0030 / 0 confirmado

    Tipo: E. Mensagem: Ordem 1348724 já está sendo tratada por GCUNHA

    Ao fazer um select, gostaria de substituir as informações numéricas por uma letra, ou seja, para todo e qualquer número que esteja na faixa de 0 a 9, seja alterado por X.



    Abraços, Julio Malliotti

    segunda-feira, 1 de setembro de 2014 16:17

Respostas

  • Mallioti,

    Segue uma Function escalar para substituir os números por letras.

    Faça às alterações necessárias conforme sua necessidade de uso:

    CREATE FUNCTION dbo.UFN_SUBSTITUI_NUMEROS(@TEXTO varchar(500))
    RETURNS varchar(500)
    BEGIN
    DECLARE @INICIO int
    SET @INICIO = PATINDEX('%[0-9]%', @TEXTO)
    
    WHILE @INICIO > 0
    BEGIN
    	SET @INICIO = PATINDEX('%[0-9]%', @TEXTO)
    	IF @INICIO > 0
    	  BEGIN
    		SET @TEXTO = REPLACE(@TEXTO, SUBSTRING(@TEXTO, @INICIO, 1),'X')
    	  END
    	ELSE
    	  BEGIN
    		BREAK;
    	  END
    END
    RETURN @TEXTO
    END
    GO
    
    SELECT dbo.UFN_SUBSTITUI_NUMEROS('Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada');
    GO

    Veja abaixo um print-screen como evidência de teste:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    terça-feira, 2 de setembro de 2014 11:46
    Moderador
  • Vou fazer o teste aqui...

    Abraços, Julio Malliotti

    • Marcado como Resposta Malliotti quarta-feira, 3 de setembro de 2014 17:53
    terça-feira, 2 de setembro de 2014 18:52

Todas as Respostas

  • Julio,

          Você poderia utilizar o REPLACE... O código não vai ficar lá essas coisas de bonito, mas é uma solução...

    declare @Texto varchar(50) = 'Mensagem: Ordem 1348724 já está sendo tratada por GCUNHA'
    set @texto = replace(@texto, '0', 'X')
    set @texto = replace(@texto, '1', 'X')
    set @texto = replace(@texto, '2', 'X')
    set @texto = replace(@texto, '3', 'X')
    set @texto = replace(@texto, '4', 'X')
    set @texto = replace(@texto, '5', 'X')
    set @texto = replace(@texto, '6', 'X')
    set @texto = replace(@texto, '7', 'X')
    set @texto = replace(@texto, '8', 'X')
    set @texto = replace(@texto, '9', 'X')
    select @Texto
    -- resultado
    -- Mensagem: Ordem XXXXXXX já está sendo tratada por GCUNHA
    set @texto = 'Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada'
    set @texto = replace(@texto, '0', 'X')
    set @texto = replace(@texto, '1', 'X')
    set @texto = replace(@texto, '2', 'X')
    set @texto = replace(@texto, '3', 'X')
    set @texto = replace(@texto, '4', 'X')
    set @texto = replace(@texto, '5', 'X')
    set @texto = replace(@texto, '6', 'X')
    set @texto = replace(@texto, '7', 'X')
    set @texto = replace(@texto, '8', 'X')
    set @texto = replace(@texto, '9', 'X')
    select @Texto
    -- Resultado
    -- Operação-marco XXXX da sequência X na ordem XXXXXX ainda não foi confirmada


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    segunda-feira, 1 de setembro de 2014 22:01
    Moderador
  • Julio,

    Você pode colocar o código do Roberto em uma função... aí fica mais bonito...


    Tulio Rosa | http://tuliorosa.com.br

    terça-feira, 2 de setembro de 2014 11:28
  • Mallioti,

    Segue uma Function escalar para substituir os números por letras.

    Faça às alterações necessárias conforme sua necessidade de uso:

    CREATE FUNCTION dbo.UFN_SUBSTITUI_NUMEROS(@TEXTO varchar(500))
    RETURNS varchar(500)
    BEGIN
    DECLARE @INICIO int
    SET @INICIO = PATINDEX('%[0-9]%', @TEXTO)
    
    WHILE @INICIO > 0
    BEGIN
    	SET @INICIO = PATINDEX('%[0-9]%', @TEXTO)
    	IF @INICIO > 0
    	  BEGIN
    		SET @TEXTO = REPLACE(@TEXTO, SUBSTRING(@TEXTO, @INICIO, 1),'X')
    	  END
    	ELSE
    	  BEGIN
    		BREAK;
    	  END
    END
    RETURN @TEXTO
    END
    GO
    
    SELECT dbo.UFN_SUBSTITUI_NUMEROS('Operação-marco 0030 da sequência 0 na ordem 1344106 ainda não foi confirmada');
    GO

    Veja abaixo um print-screen como evidência de teste:

    Se ajudou na sua solução, não esqueça de marcar como resposta !

    Abraços,

    Durval Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    terça-feira, 2 de setembro de 2014 11:46
    Moderador
  • Vou fazer o teste aqui...

    Abraços, Julio Malliotti

    • Marcado como Resposta Malliotti quarta-feira, 3 de setembro de 2014 17:53
    terça-feira, 2 de setembro de 2014 18:52